我有一个包含很多特殊字符的字符串。我想删除所有这些,但保留字母字符。
我该怎么做?
最佳答案
这取决于你的意思。如果您只想摆脱它们,请执行以下操作:
(更新:显然你也想保留数字,在这种情况下使用第二行)
String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
或等价物:
String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
(所有这些都可以通过预编译正则表达式模式并将其存储在常量中得到显着改善)
或者,使用 Guava :
private static final CharMatcher ALNUM =
CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
.or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);
但是,如果您想将重音字符转换为仍然是 ascii 的合理字符,请查看以下问题:
关于java - 如何替换字符串中的特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4283351/