class SoundSearcher {
private static final char HANGUL_BEGIN_UNICODE = 44032;
private static final char HANGUL_LAST_UNICODE = 55203;
private static final char HANGUL_BASE_UNIT = 588;
private static final char[] INITIAL_SOUND = { 'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ',
'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ' };
private static boolean isInitialSound(char searchar) {
for (char c : INITIAL_SOUND) {
if (c == searchar) {
return true;
}
}
return false;
}
private static char getInitialSound(char c) {
int hanBegin = (c - HANGUL_BEGIN_UNICODE);
int index = hanBegin / HANGUL_BASE_UNIT;
return INITIAL_SOUND[index];
}
private static boolean isHangul(char c) {
return HANGUL_BEGIN_UNICODE <= c && c <= HANGUL_LAST_UNICODE;
}
public SoundSearcher() {
}
public static boolean matchString(String value, String search) {
int t = 0;
int seof = value.length() - search.length();
int slen = search.length();
if (seof < 0)
return false;
for (int i = 0; i <= seof; i++) {
t = 0;
while (t < slen) {
if (isInitialSound(search.charAt(t)) == true
&& isHangul(value.charAt(i + t))) {
if (getInitialSound(value.charAt(i + t)) == search
.charAt(t))
t++;
else
break;
} else {
if (value.charAt(i + t) == search.charAt(t))
t++;
else
break;
}
}
if (t == slen)
return true;
}
return false;
}
}
어플 검색기능에서 가져온건데..도통 뭔소린지...
크게는 글자를 입력하면 글자를 매칭에서 db를 가져오는건데..이걸 세부적으로 따지니깐
머리가 안돌아가네요..유니코드를 이용해서 한글값을 가져오고 비교해서 한글이 맞는지 확인하고..
또 뭐있는건지...하..이걸 어떻게 설명하라고 주신건지...도와주세요..오유님들...