이 대답은 How to convert to Korean initials 및 The Korean Writing System의 정보를 사용합니다. 후자의 설명처럼, 한글은 초기, 모음 및 꼬리 자음 (있는 경우)의 세 부분으로 나눌 수 있습니다. 꼬리 자음은 ㅆ
과 같은 2 개의 자음으로 구성 될 수 있습니다. 코딩 한글 문자가 공식을 사용하여 인코딩/디코딩 할 수 있도록로 (한국 작성 시스템)에 의해 설명 된 바와 같이
코딩 유니 코드이었다 , 이럴는 매우 훌륭하게 설계 :
tail = mod (Hangul codepoint − 44032, 28)
vowel = 1 + mod (Hangul codepoint − 44032 − tail, 588)/28
lead = 1 + int [ (Hangul codepoint − 44032)/588 ]
나는 같은 필요하기 때문에 당신이 설명하는대로 일이, 나는 다음과 같은 구현 :
ㅎ
이 (이니셜에서) 꼬리 대 모든 글자의 경우만큼
ᇂ
(꼬리)에서 동일하지 않습니다하는 것으로
private final static String getCharacter(final String character) {
// the following characters are in the correct (i.e. Unicode) order
final String initials = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ";// list of initials
final String vowels = "ᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ";// list of vowels
final String finals = "ᆨᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿᇀᇁᇂ";// list of tail characters
final int characterValue = character.codePointAt(0); // Unicode value
final int hangulUnicodeStartValue = 44032;
if (characterValue < hangulUnicodeStartValue)
return character; // for instance for 32 (space)
final int tailIndex = Math.round((characterValue - hangulUnicodeStartValue) % 28) - 1;
final int vowelIndex = Math.round(((characterValue - hangulUnicodeStartValue - tailIndex) % 588)/28);
final int initialIndex = (characterValue - hangulUnicodeStartValue)/588;
final String leadString = initials.substring(initialIndex, initialIndex + 1);
final String vowelString = vowels.substring(vowelIndex, vowelIndex + 1);
final String tailString = tailIndex == -1 ? "" : finals.substring(tailIndex, tailIndex + 1);// may be -1 when there is no tail character
return leadString + vowelString + tailString;
}
.
참고로 인해 한국의 작성 시스템에서 예제로 0에서 시작하는 인덱스 대신 1에 해당을, 우리는 tail
에서 1을 빼고하지 vowel
1을 추가하고 lead
위의 코드를 테스트하기 위해해야 가능한 꼬리의 숫자로, 따라서 ㄱ
및 ㅅ
이 조금 수작업 수 있습니다, 당신은 ᆪ
에서 문자를 모두해야하는 경우
@Test
public void deconstructKoreanCharacters() {
final String koreanText = "항성은 항상 혼자 있는 것이 아니라, 두 개 이상의";
for (int i = 0; i < koreanText.length(); i++) {
final String character = koreanText.substring(i, i + 1);
final String decomposedCharacters = getCharacter(character);
System.out.println(character + ":" + decomposedCharacters);
}
Statics.doNothing();
}
: 당신은이 셋 개, 넷 문자 값을 포함하는, 예를 들어, 사용할 수 있습니다 문자들 27 (단일 문자 꼬리 포함)
'word.charAt (word.length() - 1) == '람''은'word.endsWith ("람") == true와 일치합니다. 왜 다른 결과를 기대하는지 설명 할 수 있습니까? – Bill
[이 답변 확인] (http://stackoverflow.com/questions/10472294/how-to-convert-to-korean-initials) 한국어 문자열 인코딩 및 해독에 대해 많이 설명합니다. – Gatusko
AFAICT, 한국어는 요즘 보통 작성됩니다. 행은 왼쪽에서 오른쪽으로 (예 : 영어)이므로''사람 "'은''람 ''으로 끝납니다. 오른쪽에서 왼쪽으로 해석 (아랍어와 같은)을 기대합니까? – Bohemian