[Android] 한글 초성 검색  +   [Embedded Device/Android]   |  2011.10.17 14:56
출처 : http://roter.pe.kr/122

한글 초성 검색 기능이 필요하여 구현해 보았다.

기본 적인 원리는

가~깋 나~닣.......... 하~힣
을 사용 한것.

http://www.androidpub.com/45681 를 참조하여 구현하였다.
01./**
02.* 초성 검색 알고리즘을 위한 클래스 이다.
03.* @author roter
05.*/
06.public class SoundSearcher
07.{
08.private static final char HANGUL_BEGIN_UNICODE = 44032// 가
09.private static final char HANGUL_LAST_UNICODE = 55203// 힣
10.private static final char HANGUL_BASE_UNIT = 588;//각자음 마다 가지는 글자수
11.//자음
12.private static final char[] INITIAL_SOUND = { 'ㄱ''ㄲ''ㄴ','ㄷ''ㄸ''ㄹ''ㅁ''ㅂ''ㅃ''ㅅ''ㅆ''ㅇ''ㅈ''ㅉ','ㅊ''ㅋ''ㅌ''ㅍ''ㅎ' };
13. 
14. 
15./**
16.* 해당 문자가 INITIAL_SOUND인지 검사.
17.* @param searchar
18.* @return
19.*/
20.private static boolean isInitialSound(char searchar){
21.for(char c:INITIAL_SOUND){
22.if(c == searchar){
23.return true;
24.}
25.}
26.return false;
27.}
28. 
29./**
30.* 해당 문자의 자음을 얻는다.
31.
32.* @param c 검사할 문자
33.* @return
34.*/
35.private static char getInitialSound(char c) {
36.int hanBegin = (c - HANGUL_BEGIN_UNICODE);
37.int index = hanBegin / HANGUL_BASE_UNIT;
38.return INITIAL_SOUND[index];
39.}
40. 
41./**
42.* 해당 문자가 한글인지 검사
43.* @param c 문자 하나
44.* @return
45.*/
46.private static boolean isHangul(char c) {
47.return HANGUL_BEGIN_UNICODE <= c && c <= HANGUL_LAST_UNICODE;
48.}
49. 
50./**
51.* 생성자.
52.*/
53.public SoundSearcher() { }
54. 
55./** * 검색을 한다. 초성 검색 완벽 지원함.
56.* @param value : 검색 대상 ex> 초성검색합니다
57.* @param search : 검색어 ex> ㅅ검ㅅ합ㄴ
58.* @return 매칭 되는거 찾으면 true 못찾으면 false. */
59.public static boolean matchString(String value, String search){
60.int t = 0;
61.int seof = value.length() - search.length();
62.int slen = search.length();
63.if(seof < 0)
64.return false//검색어가 더 길면 false를 리턴한다.
65.for(int i = 0;i <= seof;i++){
66.t = 0;
67.while(t < slen){
68.if(isInitialSound(search.charAt(t))==true && isHangul(value.charAt(i+t))){
69.//만약 현재 char이 초성이고 value가 한글이면
70.if(getInitialSound(value.charAt(i+t))==search.charAt(t))
71.//각각의 초성끼리 같은지 비교한다
72.t++;
73.else
74.break;
75.else {
76.//char이 초성이 아니라면
77.if(value.charAt(i+t)==search.charAt(t))
78.//그냥 같은지 비교한다.
79.t++;
80.else
81.break;
82.}
83.}
84.if(t == slen)
85.return true//모두 일치한 결과를 찾으면 true를 리턴한다.
86.}
87.return false//일치하는 것을 찾지 못했으면 false를 리턴한다.
88.}
89.}


사용 법은 평범하다.

SoundSearcher.matchString("검색할대상","검색어");
ex)
SoundSearcher.matchString("안녕하세요","ㅇㄴ하"); //true
SoundSearcher.matchString("반갑습니다","ㅂㄱ습ㄴ"); //true
SoundSearcher.matchString("안녕히가세요","ㅇㄴㅎㅎ"); //false

TRUE가 리턴 되면 찾은 것이다
 

 
TRACKBACKS 0    COMMENTS 2

 

정재현 2012.03.06 11:49  
감사합니다 ㅎ 영어도 될련지요?
jhbaek 2015.09.05 22:45 신고  
안녕하세요~ 제 소스를 이용해 주셔서 감사합니다^^ 링크 주소가
http://jhb.kr/122
로 바꼈습니다~~~ 감사합니다.

비밀글로 저장  
 
 
<<이전   | 1 | ··· | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | ··· | 730 |   다음>>
 

rednine's Blog is powered by Daum & tistory