한글 받침에따라서 '을/를' 구분하기
Unity3D/C# 2020. 10. 19. 17:51반응형
https://gun0912.tistory.com/65
한글 유니코드 조합하기
= 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 |