可能重複:
Java. Ignore accents when comparing strings
Java string searching ignoring accentsJava的Unicode比較
大家好
我需要比較Java中的字符串,可能是像 '克洛伊' 和「Chloé的」。 我需要他們是平等的。 任何人都知道最佳實踐是什麼?還是有一些第三方庫?
羅馬
可能重複:
Java. Ignore accents when comparing strings
Java string searching ignoring accentsJava的Unicode比較
大家好
我需要比較Java中的字符串,可能是像 '克洛伊' 和「Chloé的」。 我需要他們是平等的。 任何人都知道最佳實踐是什麼?還是有一些第三方庫?
羅馬
我們比較前字符串「Chloé的」到「克洛伊」的特殊字符及其等價的ASCII字符之間的硬編碼映射轉換。這很好,但很笨拙,可能還有一些我們已經遺忘的特殊字符。
我們的解決方案看起來是這樣的:
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 2010-11-29 12:28:26
這個特殊的例子可以用`java.text.Normalizer`來代替。另見[這個答案](http://stackoverflow.com/questions/2397804/java-string-searching-ignoring-accents/2397830#2397830)。 – BalusC 2010-11-29 12:37:07
在我們的例子中,性能還不錯,因爲它沒有被調用很多次。 – 2010-11-29 12:48:48
看看International Components for Unicode,它可以做你需要的。
編輯:這裏是讓你開始一些示例代碼(從校書郎的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");
}
什麼stripAccent從Apache的百科全書?
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的例子),你可能會想給它一個想試試
其實,他們是不相等的,除非第二個是對法國英文版(這意味着,你必須翻譯它並做一個比較)。 – 2010-11-29 11:52:06