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

Tan*_*anu 82 java string

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

我怎样才能做到这一点?

Sea*_*oyd 180

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

String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
Run Code Online (Sandbox Code Playgroud)

或等效的:

String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
Run Code Online (Sandbox Code Playgroud)

(通过预编译正则表达式并将其存储在常量中,可以显着提高所有这些功能)

或者,与番石榴:

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);
Run Code Online (Sandbox Code Playgroud)

但是如果你想将重音符号转换为仍然是ascii的合理的字符,请看看这些问题:

  • @Tanu这是一个不同的问题.把它变成一个新的 (2认同)

Dhi*_*dya 61

我正在使用这个.

s = s.replaceAll("\\W", ""); 
Run Code Online (Sandbox Code Playgroud)

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

这里

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

\ W:非单词字符


dhu*_*981 9

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

replaceAll("[^a-zA-Z0-9]", "");
Run Code Online (Sandbox Code Playgroud)

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

replaceAll("[^a-zA-Z]", "");
Run Code Online (Sandbox Code Playgroud)

  • 对于空间使用`replaceAll("[^ a-zA-Z0-9]","");` (5认同)

小智 7

将任何特殊字符替换为

replaceAll("\\your special character","new character");
Run Code Online (Sandbox Code Playgroud)

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

replaceAll("\\*","");
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*lla 7

按照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;
    }
}
Run Code Online (Sandbox Code Playgroud)