在字符串中搜索子字符串重音不敏感

时间:2016-03-21 22:50:10

标签: android localization

我是希腊人。 当我使用子字符串"αυλ"搜索我的联系人时,所有这些联系人都匹配:"Παύλος""Παυλίνα""Αυλός"

因此,Android在字母“α”中匹配字母“α”和“ά”。

是否有此功能的API,或者我必须以艰难的方式编写代码? 例如:string.replaceAll("ά", "α").replaceAll("έ", "ε").replaceAll(......) 这不是多语言的方式。

1 个答案:

答案 0 :(得分:1)

link的代码似乎与您想要的一致。

import java.text.Normalizer;
import java.util.regex.Pattern;

public String deAccent(String str) {
    String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD); 
    Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
    return pattern.matcher(nfdNormalizedString).replaceAll("");
}

在最新版本的Java中,\p{Script=Greek}\p{sc=Greek}\p{IsGreek}\p{Greek}添加了一些Unicode支持。您可能想要研究使用它们。