我有一个包含许多特殊字符的字符串。我想删除所有这些,但保留字母字符。
我该怎么做?
答案 0 :(得分:170)
这取决于你的意思。如果你只是想摆脱它们,那就这样做:
(更新:显然你也想保留数字,在这种情况下使用第二行)
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的合理字符,请查看以下问题:
答案 1 :(得分:59)
我正在使用它。
s = s.replaceAll("\\W", "");
它替换字符串中的所有特殊字符。
这里
\ w:单词字符,[a-zA-Z_0-9]
的缩写\ W:非单词字符
答案 2 :(得分:9)
您可以使用以下方法保留字母数字字符。
replaceAll("[^a-zA-Z0-9]", "");
如果您只想保留字母字符,请使用此
replaceAll("[^a-zA-Z]", "");
答案 3 :(得分:1)
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
此处除了空格,逗号和&符号之外的所有特殊字符都将被替换。您还可以通过以下正则表达式省略空格,逗号和&符号。
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
其中Input是我们需要替换字符的字符串。
答案 4 :(得分:1)
将所有特殊字符替换为
replaceAll("\\your special character","new character");
ex:用空格替换所有出现的*
replaceAll("\\*","");
*此语句一次只能替换一种特殊字符
答案 5 :(得分:1)
以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;
}
}
答案 6 :(得分:0)
您可以在字符串上使用基本正则表达式来查找所有特殊字符,或使用模式和匹配器类来搜索/修改/删除用户定义的字符串。此链接有一些简单易懂的正则表达式示例:http://www.vogella.de/articles/JavaRegularExpressions/article.html
答案 7 :(得分:0)
您可以从window pc中的charactermap工具获取该垃圾字符的unicode并添加\ u,例如\ u00a9版权符号。 现在你可以将该字符串与特定的垃圾字符串一起使用,不要删除任何垃圾字符,而是用适当的unicode替换。
答案 8 :(得分:0)
对于空格使用“[^ a-z A-Z 0-9]”此模式
答案 9 :(得分:-1)
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();