Rom*_*man 6 java string unicode
可能的重复:
Java.在比较字符串Java字符串搜索忽略重音时
忽略重音
大家好
我需要比较java中可能像'Chloe'和'Chloé'的字符串.我需要它们是平等的.谁知道最佳做法是什么?还是有一些第三方图书馆?
罗马
看看国际组件的Unicode,它可以做你需要的.
编辑:这里有一些示例代码可以帮助您入门(来自Collator Javadoc):
// Get the Collator for US English and set its strength to PRIMARY
Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
if (usCollator.compare("abc", "ABC") == 0) {
System.out.println("Strings are equivalent");
}
Run Code Online (Sandbox Code Playgroud)
在比较之前,我们使用特殊字符与其等效 ASCII 字符之间的硬编码映射将字符串“Chlo\xc3\xa9”转换为“Chloe”。这工作得很好,但很笨拙,而且可能有一些我们忘记了的特殊字符。
\n\n我们的解决方案看起来像这样:
\n\npublic static String replaceAccents(String string) {\n String result = null;\n\n if (string != null) {\n result = string;\n\n result = result.replaceAll("[\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa5\xc3\xa4]", "a");\n result = result.replaceAll("[\xc3\xa7]", "c");\n result = result.replaceAll("[\xc3\xa8\xc3\xa9\xc3\xaa\xc3\xab]", "e");\n result = result.replaceAll("[\xc3\xac\xc3\xad\xc3\xae\xc3\xaf]", "i");\n result = result.replaceAll("[\xc3\xb1]", "n");\n result = result.replaceAll("[\xc3\xb2\xc3\xb3\xc3\xb4\xc3\xb5\xc3\xb6]", "o");\n result = result.replaceAll("[\xc3\xb9\xc3\xba\xc3\xbb\xc3\xbc]", "u");\n result = result.replaceAll("[\xc3\xbf\xc3\xbd]", "y");\n\n result = result.replaceAll("[\xc3\x80\xc3\x81\xc3\x82\xc3\x83\xc3\x85\xc3\x84]", "A");\n result = result.replaceAll("[\xc3\x87]", "C");\n result = result.replaceAll("[\xc3\x88\xc3\x89\xc3\x8a\xc3\x8b]", "E");\n result = result.replaceAll("[\xc3\x8c\xc3\x8d\xc3\x8e\xc3\x8f]", "I");\n result = result.replaceAll("[\xc3\x91]", "N");\n result = result.replaceAll("[\xc3\x92\xc3\x93\xc3\x94\xc3\x95\xc3\x96]", "O");\n result = result.replaceAll("[\xc3\x99\xc3\x9a\xc3\x9b\xc3\x9c]", "U");\n result = result.replaceAll("[\xc3\x9d]", "Y");\n }\n\n return result;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n所以我很好奇这个问题有一个好的答案!
\n