한글 받침에따라서 '을/를' 구분하기

Unity3D/C# 2020. 10. 19. 17:51
반응형

https://m.blog.naver.com/PostView.nhn?blogId=zzangdol57&logNo=30155486090&proxyReferer=https:%2F%2Fwww.google.com%2F

 

<한국어 문법> 은/는, 이/가, 을/를, 와/과 구분 방법

조사에는 의미와 성분이 같지만 두 가지 형태로 모형이 다른 경우가 있습니다보조사인 '-은/-는'주격 조사,...

blog.naver.com

https://gun0912.tistory.com/65

 

[안드로이드/JAVA]한글 받침에따라서 '을/를' 구분하기

안드로이드뿐만아니라 아이폰,PC에서 서비스를 사용할때 'xxx을(를)' 혹은 'xxx이(가)' 로 표시되는 메세지를 많이 보셨을겁니다. 이는 한글의 받침때문에 일어나는 한국어만의 문제입니다. 받침이

gun0912.tistory.com

한글 유니코드 조합하기

= 0xAC00(처음 한글 시작값) + (초성 인덱스 x 21 x 28 ) + (중성 인덱스 x 28) + 종성 인덱스



유니코드 분해하기

초성 인덱스 = ((한글 유니코드값 - 0xAC00) / 28) / 21

중성 인덱스 = ((한글 유니코드값 - 0xAC00) / 28) % 21

종성 인덱스 = (한글 유니코드값 - 0xAC00) % 28







여기서 우리는 종성인덱스 값을 가져올 수 있습니다.



이를 안드로이드의 코드로 구현해본다면 아래와 같습니다.

char lastName = name.charAt(name.length() - 1);
int index= (lastName - 0xAC00) % 28;

찾고자하는 값의 마지막 글자를 가져온뒤, 이 글자의 종성 인덱스 값을 찾아옵니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study24
{
    class App
    {
        //생성자 
        public App() {

            var str = this.GetCompleteWorld("쓰레받이", "을", "를");
            Console.WriteLine(str);
            str = this.GetCompleteWorld("빗자루", "을", "를");
            Console.WriteLine(str);
            str = this.GetCompleteWorld("가면", "을", "를");
            Console.WriteLine(str);
            str = this.GetCompleteWorld("물", "을", "를");
            Console.WriteLine(str);

        }

        public string GetCompleteWorld(string name, string firstVal, string secondVal) {
            char lastName = name.ElementAt(name.Length - 1);
            int index = (lastName - 0xAC00) % 28;
            Console.WriteLine(index);
            //한글의 제일 처음과 끝의 범위 밖일경우 에러 
            if (lastName < 0xAC00 || lastName > 0xD7A3) {
                return name;
            }

            string selectVal = (lastName - 0xAC00) % 28 > 0 ? firstVal : secondVal;

            return name + selectVal;
        }
             

    }
}
반응형

'Unity3D > C#' 카테고리의 다른 글

C# 확률을 적용한 랜덤값 선택하기 (cumulative)  (0) 2020.11.26
디버거에서 변수에 대한 메모리  (0) 2020.11.24
xml to json  (0) 2020.08.05
C# 배열연습  (0) 2020.04.17
구조체(struct) 와 클래스(class)의 차이점  (0) 2019.08.15
: