可能重复:
ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ş --> n 或从 unicode 字符中删除变音符号
如何替换字符串中的特殊字符?
我想将一些字符串(例如
"I>Télé"
)格式化为"itele"
之类的内容。
我的想法是,我希望我的字符串是小写的(完成),没有空格(完成),没有重音符号或特殊字符(如>
,<
,/
,%
,~
,) é
、@
、 ï
等)。
删除出现的特殊字符是可以的,但我想在删除重音符号的同时保留字母(就像我在示例中所做的那样)。这就是我所做的,但我不认为最好的解决方案是将每个 é,è,ê,ë 替换为“e”,而不是对“i”,“a”等再次执行此操作,然后删除每个特殊字符...
String name ="I>télé" //example
String result = name.toLowerCase().replace(" ", "").replace("é","e").........;
其目的是为 Android 应用程序的资源提供有效的文件名,所以如果您有任何其他想法,我会采纳!
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]", "");
你可以做类似的事情
StringBuilder res = new StringBuilder();
for (char c : name.toCharArray()) {
if (Character.isLetter(c) || Character.isDigit(c))
res.append(c);
}
s = res.toString();
//Normalize using the method below
http://blog.smartkey.co.uk/2009/10/how-to-strip-acents-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;
}
尝试使用ascii代码。 此链接可能会有帮助