728x90
반응형
출처 : https://okky.kr/article/549842
* 한글 조사 연결 (을/를,이/가,은/는,로/으로)
1. 종성에 받침이 있는 경우 '을/이/은/으로/과'
2. 종성에 받침이 없는 경우 '를/가/는/로/와'
3. '로/으로'의 경우 종성의 받침이 'ㄹ' 인경우 '로'
1개의 한글은 초성 + 중성 + 종성의 조합으로 유니코드값이 만들어짐.
한글 유니코드 조합하기
= 0xAC00(처음 한글 시작값) + (초성 인덱스 x 21 x 28 ) + (중성 인덱스 x 28) + 종성 인덱스
유니코드 분해하기
초성 인덱스 = ((한글 유니코드값 - 0xAC00) / 28) / 21
중성 인덱스 = ((한글 유니코드값 - 0xAC00) / 28) % 21
종성 인덱스 = (한글 유니코드값 - 0xAC00) % 28
/**
* 한글 조사 연결 (을/를,이/가,은/는,로/으로)
* 1. 종성에 받침이 있는 경우 '을/이/은/으로/과'
* 2. 종성에 받침이 없는 경우 '를/가/는/로/와'
* 3. '로/으로'의 경우 종성의 받침이 'ㄹ' 인경우 '로'
* 참고 1 : http://gun0912.tistory.com/65 (소스 참고)
* 참고 2 : http://www.klgoodnews.org/board/bbs/board.php?bo_table=korean&wr_id=247 (조사 원리 참고)
* @param name
* @param firstValue
* @param secondValue
* @return
*/
public static String getPostWord(String str, String firstVal, String secondVal) {
try {
char laststr = str.charAt(str.length() - 1);
// 한글의 제일 처음과 끝의 범위밖일 경우는 오류
if (laststr < 0xAC00 || laststr > 0xD7A3) {
return str;
}
int lastCharIndex = (laststr - 0xAC00) % 28;
// 종성인덱스가 0이상일 경우는 받침이 있는경우이며 그렇지 않은경우는 받침이 없는 경우
if(lastCharIndex > 0) {
// 받침이 있는경우
// 조사가 '로'인경우 'ㄹ'받침으로 끝나는 경우는 '로' 나머지 경우는 '으로'
if(firstVal.equals("으로") && lastCharIndex == 8) {
str += secondVal;
} else {
str += firstVal;
}
} else {
// 받침이 없는 경우
str += secondVal;
}
} catch (Exception e) {
//e.printStackTrace();
}
return str;
}
테스트 코드
String name;
name = "네이버";
System.out.println(getPostWord(name,"으로","로"));
System.out.println(getPostWord(name,"을","를"));
System.out.println(getPostWord(name,"이","가"));
System.out.println(getPostWord(name,"은","는"));
System.out.println(getPostWord(name,"과","와"));
name = "카카오톡";
System.out.println(getPostWord(name,"으로","로"));
System.out.println(getPostWord(name,"을","를"));
System.out.println(getPostWord(name,"이","가"));
System.out.println(getPostWord(name,"은","는"));
System.out.println(getPostWord(name,"과","와"));
name = "구글";
System.out.println(getPostWord(name,"으로","로"));
System.out.println(getPostWord(name,"을","를"));
System.out.println(getPostWord(name,"이","가"));
System.out.println(getPostWord(name,"은","는"));
System.out.println(getPostWord(name,"과","와"));
name = "문화포털";
System.out.println(getPostWord(name,"으로","로"));
System.out.println(getPostWord(name,"을","를"));
System.out.println(getPostWord(name,"이","가"));
System.out.println(getPostWord(name,"은","는"));
System.out.println(getPostWord(name,"과","와"));
결과화면 :
728x90
반응형
LIST
'IT 웹개발 > Java' 카테고리의 다른 글
[JAVA] 파일 경로에서 파일명 추출 ( 마지막 구분자부터 마지막까지 값 출력 ) (0) | 2024.04.17 |
---|---|
log4sql 을 이용해 콘솔 내 sql 쿼리 보기 좋게 확인하기 (0) | 2022.05.13 |
[정규식] Regular Expressions 공부하기 좋은 사이트 (0) | 2022.03.16 |
[Java] 업로드 한 파일 확장자 체크하기 (0) | 2022.01.18 |
[정규식] Java 정규식 테스트 사이트 (0) | 2022.01.15 |