如何替换字符串中的特殊字符?

问题描述 投票:77回答:9

我有一个包含许多特殊字符的字符串。我想删除所有这些,但保留字母字符。

我怎样才能做到这一点?

java string
9个回答
173
投票

这取决于你的意思。如果您只想摆脱它们,请执行以下操作: (更新:显然你也想保留数字,在这种情况下使用第二行)

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的合理的字符,请看看这些问题:


60
投票

我正在使用这个。

s = s.replaceAll("\\W", ""); 

它替换字符串中的所有特殊字符。

这里

\ w:单词字符,[a-zA-Z_0-9]的缩写

\ W:非单词字符


9
投票

您可以使用以下方法来保留字母数字字符。

replaceAll("[^a-zA-Z0-9]", "");

如果你只想保留字母字符,请使用此功能

replaceAll("[^a-zA-Z]", "");

2
投票
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

这里除了空格,逗号和和号之外的所有特殊字符都将被替换。您还可以通过以下正则表达式省略空格,逗号和&符号。

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");

其中Input是我们需要替换字符的字符串。


2
投票

替换任何特殊字符

replaceAll("\\your special character","new character");

例如:用空格替换*的所有出现

replaceAll("\\*","");

*此语句一次只能替换一种特殊字符


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;
    }
}

0
投票

您可以在字符串上使用基本正则表达式来查找所有特殊字符,或使用模式和匹配器类来搜索/修改/删除用户定义的字符串。这个链接有一些简单易懂的正则表达式示例:http://www.vogella.de/articles/JavaRegularExpressions/article.html


0
投票

您可以从window pc中的charactermap工具获取该垃圾字符的unicode并添加\ u,例如\ u00a9版权符号。现在你可以将该字符串与特定的垃圾字符串一起使用,不要删除任何垃圾字符,而是用适当的unicode替换。


0
投票

对于空格使用“[^ a-z A-Z 0-9]”此模式

© www.soinside.com 2019 - 2024. All rights reserved.