2013-07-03 80 views
1

我正在尋找一種比較字符串值的方法,其中字符串中的某些字符可能是間斷字符,例如éô,但是,應該忽略該查找。例如,當搜索名稱列表時,用戶可能提供標準Rene,其應該與列表條目ReneRené匹配(即,應當將ASCII 101和233視爲相同的事物)。匹配標點符號

感謝名單

編輯:優選地在所有UNICODE字符。我想可以[應該]爲此實現一些自定義解決方案;我只是想知道是否已經存在 - 幾乎像Char.GetBaseCharacterFromPunctuatedCharacter(char):P

回答

1

你沒有說你正在使用哪種語言,所以我使用java回答。其他語言有相似的結構。此外,您的意思是變音符號,而不是punctuation(。,?!...)

collator類支持比較的強度。例如,對捷克而言,變音符號的區別被認爲是次要區別。

或者你可能想要刪除任何變音符號按unicode標準分解之前比較(分解所有字符到基本字母+變音符號),然後通過一個簡單的正則表達式刪除變音符號(見this SO questionInCombiningDiacriticalMarks的解釋)。在java:

public static String removeDiacritics(String str) { 
    return Normalizer 
    .normalize(string, Form.NFD) // decompose into letters+diacritics 
    .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); // remove diacritics 
} 
+0

呵呵,所以這裏的實際問題是,我實際上並不知道它被稱爲,所以我不知道該找什麼。正常化的作品,但直接比較也是可能的,這兩個例子說明在這裏:http://stackoverflow.com/questions/359827/ignoring-accented-letters-in-string-comparison – that0th3rGuy

+0

是的,我提到的collat​​or上面可以做直接比較在Java對應於您鏈接到的C#代碼。 (如果你同意我的回答,你可以贊成嗎?) – Jirka