如何从Java中的任何字符串中获取字母数字字符串?

Thi*_*ult 3 java string

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

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

删除特殊字符的出现是可以的,但是我想在删除重音时保留字母(就像我在我的例子中所做的那样).这就是我所做的,但我不认为好的解决方案是用"e"替换每个é,è,ê,ë,而不是为"i","a"等替换它,然后删除每一个特殊字符...

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

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

And*_*yle 13

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

完成此操作后,您的String将是非重音字符,重音修饰符和您提到的其他特殊字符的组合.此时,您可以仅使用白名单来过滤字符串中的字符,以保留您想要的内容(这可能就像[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]", "");
Run Code Online (Sandbox Code Playgroud)

  • 感谢提供的链接,我找到了[this](http://stackoverflow.com/a/4122207/1520739).解决方案将是this和replaceAll("[^ A-Za-z0-9]","")的组合.非常感谢! (2认同)

归档时间:

查看次数:

9186 次

最近记录:

13 年,9 月 前