我有一个包含许多特殊字符的字符串。我想删除所有这些,但保留字母字符。
我怎样才能做到这一点?
这取决于你的意思。如果您只想摆脱它们,请执行以下操作: (更新:显然你也想保留数字,在这种情况下使用第二行)
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的合理的字符,请看看这些问题:
我正在使用这个。
s = s.replaceAll("\\W", "");
它替换字符串中的所有特殊字符。
这里
\ w:单词字符,[a-zA-Z_0-9]的缩写
\ W:非单词字符
您可以使用以下方法来保留字母数字字符。
replaceAll("[^a-zA-Z0-9]", "");
如果你只想保留字母字符,请使用此功能
replaceAll("[^a-zA-Z]", "");
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
这里除了空格,逗号和和号之外的所有特殊字符都将被替换。您还可以通过以下正则表达式省略空格,逗号和&符号。
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
其中Input是我们需要替换字符的字符串。
替换任何特殊字符
replaceAll("\\your special character","new character");
例如:用空格替换*的所有出现
replaceAll("\\*","");
*此语句一次只能替换一种特殊字符
以Andrzej Doyle's answer为例,我认为更好的解决方案是使用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
您可以从window pc中的charactermap工具获取该垃圾字符的unicode并添加\ u,例如\ u00a9版权符号。现在你可以将该字符串与特定的垃圾字符串一起使用,不要删除任何垃圾字符,而是用适当的unicode替换。
对于空格使用“[^ a-z A-Z 0-9]”此模式