Java unicode比较

Rom*_*man 6 java string unicode

可能的重复:
Java.在比较字符串Java字符串搜索忽略重音时
忽略重音

大家好

我需要比较java中可能像'Chloe'和'Chloé'的字符串.我需要它们是平等的.谁知道最佳做法是什么?还是有一些第三方图书馆?

罗马

Tas*_*kos 9

看看国际组件的Unicode,它可以做你需要的.

编辑:这里有一些示例代码可以帮助您入门(来自Collat​​or 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)


Luk*_*der 3

在比较之前,我们使用特殊字符与其等效 ASCII 字符之间的硬编码映射将字符串“Chlo\xc3\xa9”转换为“Chloe”。这工作得很好,但很笨拙,而且可能有一些我们忘记了的特殊字符。

\n\n

我们的解决方案看起来像这样:

\n\n
public 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