Java Unicode比较

6

2
实际上,它们并不相等,除非第二个是英文的法语版本(这意味着您需要翻译它并进行比较)。 - Buhake Sindi
3个回答

9

请查看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");
}

这是唯一正确的答案。 - tchrist

3
我们使用硬编码映射将特殊字符与其对应的ASCII字符进行转换,将字符串“Chloé”翻译为“Chloe”,然后进行比较。这种方法相当有效,但很笨拙,而且可能会遗漏一些特殊字符。
我们的解决方案大致如下:
public static String replaceAccents(String string) {
  String result = null;

  if (string != null) {
    result = string;

    result = result.replaceAll("[àáâãåä]", "a");
    result = result.replaceAll("[ç]", "c");
    result = result.replaceAll("[èéêë]", "e");
    result = result.replaceAll("[ìíîï]", "i");
    result = result.replaceAll("[ñ]", "n");
    result = result.replaceAll("[òóôõö]", "o");
    result = result.replaceAll("[ùúûü]", "u");
    result = result.replaceAll("[ÿý]", "y");

    result = result.replaceAll("[ÀÁÂÃÅÄ]", "A");
    result = result.replaceAll("[Ç]", "C");
    result = result.replaceAll("[ÈÉÊË]", "E");
    result = result.replaceAll("[ÌÍÎÏ]", "I");
    result = result.replaceAll("[Ñ]", "N");
    result = result.replaceAll("[ÒÓÔÕÖ]", "O");
    result = result.replaceAll("[ÙÚÛÜ]", "U");
    result = result.replaceAll("[Ý]", "Y");
  }

  return result;
}

所以我很好奇这个问题的好答案是什么!

对我来说,这似乎是一个可能的解决方案,但我真的很好奇它的性能如何,最终我将比较很多字符串。 - Roman
1
这个特定的例子可以被 java.text.Normalizer 替换。另请参见 此答案 - BalusC
我们的情况下表现还可以,因为它并不经常被调用。 - Lukas Eder
Lucas在上面的评论给出了非常优雅的答案! - Roman

0

那么 Apache Commons 的 stripAccent 怎么样?

Removes the accents from a string.

NOTE: This is a JDK 1.6 method, it will fail on JDK 1.5.

 StringUtils.stripAccents(null)                = null
 StringUtils.stripAccents("")                  = ""
 StringUtils.stripAccents("control")           = "control"
 StringUtils.stripAccents("&ecute;clair")      = "eclair"


Parameters:
    input - String to be stripped 
Returns:
    String without accents on the text

他们没有提到Unicode编码(只给出了HTML示例),但你仍然可以尝试一下。


很遗憾,commons-lang 3.0版本已经处于beta状态很长时间了...谁知道他们什么时候才会发布新版本呢...太可惜了。 - Lukas Eder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接