3

可能重复:
ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ --> n 或从 unicode 字符中删除变音符号
如何替换字符串中的特殊字符?

我想格式化一些字符串,"I>Télé"比如"itele". 这个想法是我希望我的字符串是小写(完成),没有空格(完成),没有重音或特殊字符(如>, <, /, %, ~, é,@ï)。

删除出现的特殊字符是可以的,但我想在删除重音符号的同时保留字母(就像我在示例中所做的那样)。这是我所做的,但我不认为好的解决方案是将每个 é,è,ê,ë 替换为“e”,而不是对“i”、“a”等再做一次,然后删除每个特殊字符...

String name ="I>télé" //example
String result = name.toLowerCase().replace(" ", "").replace("é","e").........;

这样做的目的是为 Android 应用程序的资源提供有效的文件名,所以如果您有任何其他想法,我会接受!

4

3 回答 3

16

您可以使用java.text.Normalizer该类将文本转换为普通的拉丁字符,并在可能的情况下后跟变音符号(重音符号)。因此,例如,单字符串"é"将变为两个字符串['e', {COMBINING ACUTE ACCENT}]

完成此操作后,您的字符串将是非重音字符、重音修饰符和您提到的其他特殊字符的组合。此时,您可以仅使用白名单过滤字符串中的字符以保留您想要的内容(这可能与[A-Za-z0-9]正则表达式一样简单,具体取决于您所追求的内容)。

一种方法可能如下所示:

String name ="I>télé"; //example
String normalized = Normalizer.normalize(name, Form.NFD);
String result = normalized.replaceAll("[^A-Za-z0-9]", "");
于 2012-07-18T08:21:18.180 回答
1

你可以做类似的事情

String res = ""
for (char c : name.toCharArray()) {
    if (Character.isLetter(c) ||Character.isDigit(c))
        res += c    
}

//Normalize using the method below

http://blog.smartkey.co.uk/2009/10/how-to-strip-accents-from-strings-using-java-6/

public static String stripAccents(String s) {    
    s = Normalizer.normalize(s, Normalizer.Form.NFD);   
    s = s.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
    return s;
}
于 2012-07-18T08:28:29.657 回答
0

尝试使用 ascii 代码。这个链接可能会有所帮助

于 2012-07-18T08:20:17.103 回答