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


Answers:


186

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

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

但是,如果您想将带有重音符号的字符转换为仍然有意义的东西,请查看以下问题:


当我使用此功能时,它也会删除所有数字。但是我不想删除数字。只是想删除特殊字符。请提出一些建议。–
Tanu

好吧,你说过你只想要字母。但是,我将在一分钟内更新我的答案
肖恩·帕特里克·弗洛伊德

我想连接字符串,但条件类似1.如果只有一个结果,则不需要连接concat。2.如果结果在以下形式示例中比concat字符串多于1:stack + over + flow
Tanu

2
@Tanu是另一个问题。使它成为一个新的
佩卡·

如果我不希望删除空格怎么办?还是说所有制表符,换行符等空格都只能折叠成一个空格?
该死

74

我正在用这个。

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

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

这里

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

\ W:非单词字符


对<script> alert('XSS Attack')</ script>无效。如何删除'<','>','\'字符?
马诺伊

11

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

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

如果您只想保留字母字符,请使用此

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

5
太空用途replaceAll("[^a-zA-Z0-9 ]", "");
卡马尔(Qamar)

5

将任何特殊字符替换为

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

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

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

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


当我看到问题标题“如何替换字符串中的特殊字符?”的时候,我肯定在寻找什么。谢谢!
Mr.Drew

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

在这里,所有特殊字符(空格,逗号和与号除外)均被替换。您还可以通过以下正则表达式省略空格,逗号和与号。

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

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


2

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


0

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.