韩文字符的排序和分组(不熟悉韩文)
Sorting and Grouping of Korean Character (Not familiar with Korean language)
我正在尝试对 Java 中的韩文字符进行排序和分组。
目前我正准备使用
进行排序
final Collator collator = Collator.getInstance(Locale.KOREA);
Collections.sort(words, collator);
但是,我很难将它们归入元音组(ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎ)
这应该不会太难,虽然我不确定以前是否有人做过。
你要做的就是取这第一个Unicode字母。在 Unicode 中,所有韩文字母都是按照这个公式组成的,这个公式在维基百科上有很好的描述 http://en.wikipedia.org/wiki/Korean_language_and_computers#Example
因此您可以使用公式对其进行解构:
(int)((54620 - 44032) / 588)
并使用维基百科文章中提到的密钥,您可以执行类似的操作(我使用 Groovy 因为它更简单,但我相信您可以将其调整为 Java)
def words = ['곰', '세', '마리','가', '한', '집에', '있어', '아빠', '곰', '엄마', '곰', '애기', '곰'],
result = [('ㄱ'):[],
('ㄲ'):[],
('ㄴ'):[],
('ㄷ'):[],
('ㄸ'):[],
('ㄹ'):[],
('ㅁ'):[],
('ㅂ'):[],
('ㅃ'):[],
('ㅅ'):[],
('ㅆ'):[],
('ㅇ'):[],
('ㅈ'):[],
('ㅉ'):[],
('ㅊ'):[],
('ㅋ'):[],
('ㅌ'):[],
('ㅍ'):[],
('ㅎ'):[]], matrix = [(0):'ㄱ',
(1):'ㄲ',
(2):'ㄴ',
(3):'ㄷ',
(4):'ㄸ',
(5):'ㄹ',
(6):'ㅁ',
(7):'ㅂ',
(8):'ㅃ',
(9):'ㅅ',
(10):'ㅆ',
(11):'ㅇ',
(12):'ㅈ',
(13):'ㅉ',
(14):'ㅊ',
(15):'ㅋ',
(16):'ㅌ',
(17):'ㅍ',
(18):'ㅎ']
for (word in words) {
def offset = (int)((word.charAt(0) - 44032) / 588)
def firstJamo = matrix[offset]
result[firstJamo] << word
}
result
要查看此代码的运行情况,请参阅 https://groovyconsole.appspot.com/script/5767123439714304。
我正在尝试对 Java 中的韩文字符进行排序和分组。
目前我正准备使用
进行排序final Collator collator = Collator.getInstance(Locale.KOREA);
Collections.sort(words, collator);
但是,我很难将它们归入元音组(ㄱㄴㄷㄹㅁㅂㅅㅇㅈㅊㅋㅌㅍㅎ)
这应该不会太难,虽然我不确定以前是否有人做过。
你要做的就是取这第一个Unicode字母。在 Unicode 中,所有韩文字母都是按照这个公式组成的,这个公式在维基百科上有很好的描述 http://en.wikipedia.org/wiki/Korean_language_and_computers#Example
因此您可以使用公式对其进行解构:
(int)((54620 - 44032) / 588)
并使用维基百科文章中提到的密钥,您可以执行类似的操作(我使用 Groovy 因为它更简单,但我相信您可以将其调整为 Java)
def words = ['곰', '세', '마리','가', '한', '집에', '있어', '아빠', '곰', '엄마', '곰', '애기', '곰'],
result = [('ㄱ'):[],
('ㄲ'):[],
('ㄴ'):[],
('ㄷ'):[],
('ㄸ'):[],
('ㄹ'):[],
('ㅁ'):[],
('ㅂ'):[],
('ㅃ'):[],
('ㅅ'):[],
('ㅆ'):[],
('ㅇ'):[],
('ㅈ'):[],
('ㅉ'):[],
('ㅊ'):[],
('ㅋ'):[],
('ㅌ'):[],
('ㅍ'):[],
('ㅎ'):[]], matrix = [(0):'ㄱ',
(1):'ㄲ',
(2):'ㄴ',
(3):'ㄷ',
(4):'ㄸ',
(5):'ㄹ',
(6):'ㅁ',
(7):'ㅂ',
(8):'ㅃ',
(9):'ㅅ',
(10):'ㅆ',
(11):'ㅇ',
(12):'ㅈ',
(13):'ㅉ',
(14):'ㅊ',
(15):'ㅋ',
(16):'ㅌ',
(17):'ㅍ',
(18):'ㅎ']
for (word in words) {
def offset = (int)((word.charAt(0) - 44032) / 588)
def firstJamo = matrix[offset]
result[firstJamo] << word
}
result
要查看此代码的运行情况,请参阅 https://groovyconsole.appspot.com/script/5767123439714304。