본문 바로가기
Unity 유니티 기초강의

유니티 Unity C# 한글 앞 단어에 따른 을(를) 조사 변화

by 만사오케이프로 2022. 4. 20.
반응형

유니티에서 한글을 사용할경우

글자조합으로 표시해줄경우가 많습니다. 

예를 들어
로봇을 클리어 했습니다.

보스를 클리어 했습니다.

로봇 + 을(를) 클리어 했습니다.

 

조합으로 표시해주는데요.

자연스로운 문장으로 만들기위해서 을 클리어 했습니다, 를 클리어 했습니다.

2개를 만들어 상황에 따라 사용해 주어야 합니다.

 

자주사용하는 을(를), 이(가), 은(는), 과(와) 숫자에 따라 조사가 자동으로 변환되는 코드입니다.

예를 들어
로봇을(를) 클리어 했습니다. 
변환시
로봇을 클리어 했습니다. 로 자동 변환됩니다.

 

한글 앞 글자의 받침 유무에 따라 적합한 조사를 출력
숫자 0, 1, 3, 6, 7, 8은 받침이 있는 문자로 처리
2, 4, 5, 9는 받침이 없는 문자로 처리  
영문 등  
기타 문자 별도 처리 없이 “을, 은, 이”, “와”를 출력
<을>
앞 글자의 받침 유무에 따라 “을” or “를” 출력
<은>
앞 글자의 받침 유무에 따라 “은” or “는” 출력
<이>
앞 글자의 받침 유무에 따라 “이” or “가” 출력
<와>
앞 글자의 받침 유무에 따라 “와” or “과” 출력

 

public static class StringUtils
{
    private const string KOREA_JONGSUNG1 = "을(를)";
        private const string KOREA_JONGSUNG2 = "이(가)";
        private const string KOREA_JONGSUNG3 = "은(는)";
        private const string KOREA_JONGSUNG4 = "과(와)";
        
        private const string KOREA_JONGSUNG1_VALUE1 = "을";
        private const string KOREA_JONGSUNG1_VALUE2 = "를";
        private const string KOREA_JONGSUNG2_VALUE1 = "이";
        private const string KOREA_JONGSUNG2_VALUE2 = "가";
        private const string KOREA_JONGSUNG3_VALUE1 = "은";
        private const string KOREA_JONGSUNG3_VALUE2 = "는";
        private const string KOREA_JONGSUNG4_VALUE1 = "과";
        private const string KOREA_JONGSUNG4_VALUE2 = "와";
        
        
        public static string ConvertKoreaStringJongSung(string koreaString)
        {
        if(koreaString.Contains(KOREA_JONGSUNG1))
        {
        koreaString = ConvertKoreaStringJongSung(koreaString, KOREA_JONGSUNG1, KOREA_JONGSUNG1_VALUE1,
        KOREA_JONGSUNG1_VALUE2);
        }
        
        if(koreaString.Contains(KOREA_JONGSUNG2))
        {
        koreaString = ConvertKoreaStringJongSung(koreaString, KOREA_JONGSUNG2, KOREA_JONGSUNG2_VALUE1,
        KOREA_JONGSUNG2_VALUE2);
        }
        
        if(koreaString.Contains(KOREA_JONGSUNG3))
        {
        koreaString = ConvertKoreaStringJongSung(koreaString, KOREA_JONGSUNG3, KOREA_JONGSUNG3_VALUE1,
        KOREA_JONGSUNG3_VALUE2);
        }
        
        if(koreaString.Contains(KOREA_JONGSUNG4))
        {
        koreaString = ConvertKoreaStringJongSung(koreaString, KOREA_JONGSUNG4, KOREA_JONGSUNG4_VALUE1,
        KOREA_JONGSUNG4_VALUE2);
        }
        
        return koreaString;
        }

        public static string ConvertKoreaStringJongSung(string koreaString, string check, string first, string second)
        {
        int emptyCheck = 1;
        string fullString = string.Empty;
        string[] result = koreaString.Split(new string[] {check}, StringSplitOptions.None);
        if (result.Length >= 2)
        {
        for (int i = 0; i < result.Length - 1; i++)
        {
        emptyCheck = 1;
        if (result[i].Length > 0)
        {
        char[] fullChar = result[i].ToCharArray(0, result[i].Length);
        if (fullChar.Length > 0)
        {
        if (fullChar[fullChar.Length - 1] == ' ')
        {
        emptyCheck = 2;
        }
        }
        
        char[] lastName = result[i].ToCharArray(result[i].Length - emptyCheck, 1);
        if (lastName.Length > 0)
        {
        
        if (lastName[0] >= 0xAC00 && lastName[0] <= 0xD7A3)
        {
        String seletedValue = (lastName[0] - 0xAC00) % 28 > 0
        ? first
        : second;
        result[i] = result[i] + seletedValue;
        }
        //숫자에 따라 조사 변화
        else if (lastName[0] == 0x0030 || lastName[0] == 0x0031 || lastName[0] == 0x0033 || lastName[0] == 0x0036 || lastName[0] == 0x0037 || lastName[0] == 0x0038) //0, 1, 3, 6, 7, 8
        {
        result[i] = result[i] + first;
        }
        else if (lastName[0] == 0x0032 || lastName[0] == 0x0034 || lastName[0] == 0x0035 || lastName[0] == 0x0039) //2, 4, 5, 9
        {
        result[i] = result[i] + second;         
        }
        }
        }

        fullString += result[i];
        }

        fullString += result[result.Length - 1];
        koreaString = fullString;
        }

        return koreaString;
        }
    }

koreaString : 문장

check : 검색할단어 예)을(를)

first : 받침있을경우 변경할 단어 예) 을

second : 받침이 없을경우 변경할 단어 예) 를

반응형

댓글