我有一个带有很多特殊字符的字符串。我想删除所有这些,但保留字母字符。
我怎样才能做到这一点?
Answers:
那取决于你的意思。如果您只是想摆脱它们,请执行以下操作:(
更新:显然您也想保留数字,在这种情况下,请使用第二行)
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}]+","");
(通过预编译正则表达式模式并将其存储为常量,可以显着改善所有这些功能)
或者,用番石榴:
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);
但是,如果您想将带有重音符号的字符转换为仍然有意义的东西,请查看以下问题:
我正在用这个。
s = s.replaceAll("\\W", "");
它替换字符串中的所有特殊字符。
这里
\ w:一个单词字符,是[a-zA-Z_0-9]的缩写
\ W:非单词字符
您可以使用以下方法保留字母数字字符。
replaceAll("[^a-zA-Z0-9]", "");
如果您只想保留字母字符,请使用此
replaceAll("[^a-zA-Z]", "");
replaceAll("[^a-zA-Z0-9 ]", "");
遵循Andrzej Doyle答案的示例,我认为更好的解决方案是使用org.apache.commons.lang3.StringUtils.stripAccents()
:
package bla.bla.utility;
import org.apache.commons.lang3.StringUtils;
public class UriUtility {
public static String normalizeUri(String s) {
String r = StringUtils.stripAccents(s);
r = r.replace(" ", "_");
r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
return r;
}
}
您可以在字符串上使用基本正则表达式来查找所有特殊字符,也可以使用模式和匹配器类来搜索/修改/删除用户定义的字符串。此链接包含一些简单且易于理解的正则表达式示例:http : //www.vogella.de/articles/JavaRegularExpressions/article.html
对于空格,请使用“ [^ az AZ 0-9]”模式