我正在写一个java应用程序; 但坚持这一点.
基本上我有一串汉字,还有一些可能的拉丁字符或数字,让我们说:
??????????????210?????.
Run Code Online (Sandbox Code Playgroud)
我想将除拉丁语之外的中文字符或上面的数字分成"BOT".所以,最后我会有这样的清单:
[ ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 210, ???, ?, ?, ., ]
我该如何解决这个问题(对于java)?
Bal*_*usC 10
中文字符位于某些Unicode范围内:
所以你基本上需要做的就是检查角色的代码点是否在已知范围内.这个例子是编写基于堆栈的解析器/拆分器的一个很好的起点,你只需要将它扩展为拉丁字母的单独数字,这应该足够明显(提示:) Character#isDigit():
Set<UnicodeBlock> chineseUnicodeBlocks = new HashSet<UnicodeBlock>() {{
add(UnicodeBlock.CJK_COMPATIBILITY);
add(UnicodeBlock.CJK_COMPATIBILITY_FORMS);
add(UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS);
add(UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT);
add(UnicodeBlock.CJK_RADICALS_SUPPLEMENT);
add(UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION);
add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS);
add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A);
add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B);
add(UnicodeBlock.KANGXI_RADICALS);
add(UnicodeBlock.IDEOGRAPHIC_DESCRIPTION_CHARACTERS);
}};
String mixedChinese = "??????????????210?????";
for (char c : mixedChinese.toCharArray()) {
if (chineseUnicodeBlocks.contains(UnicodeBlock.of(c))) {
System.out.println(c + " is chinese");
} else {
System.out.println(c + " is not chinese");
}
}
Run Code Online (Sandbox Code Playgroud)
祝好运.
| 归档时间: |
|
| 查看次数: |
5066 次 |
| 最近记录: |