我有一个包含许多特殊字符的字符串,我想去掉所有特殊字符,但保留字母字符。如何做到这一点?
这取决于你的意思。如果你只是想摆脱它们,那就这样做:
(更新:显然你想保留数字,这种情况下请使用第二行)
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", "");
您可以使用以下方法来保留字母数字字符。
replaceAll("[^a-zA-Z0-9]", "");
如果您只想保留字母字符,请使用以下方法
replaceAll("[^a-zA-Z]", "");
replaceAll("[^a-zA-Z0-9 ]", "");
进行空格处理。 - Qamar将任何特殊字符替换为
replaceAll("\\your special character","new character");
例如:将所有出现的*替换为空格
replaceAll("\\*","");
*这个语句只能一次替换一种特殊字符
跟随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;
}
}
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
输入(Input)是我们需要替换字符的字符串。
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();
您可以在字符串上使用基本的正则表达式来查找所有特殊字符,也可以使用模式和匹配器类来搜索/修改/删除用户定义的字符串。此链接提供了一些简单易懂的正则表达式示例:http://www.vogella.de/articles/JavaRegularExpressions/article.html
你可以在Windows电脑的字符映射工具中获取那个垃圾字符的Unicode,并添加\u,例如版权符号的Unicode为\u00a9。 现在,你可以使用该字符串与特定的垃圾字符,不要删除任何垃圾字符,而是用正确的Unicode替换。
对于空格,请使用“[^a-z A-Z 0-9]”这个模式