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

2022-08-31 10:07:18

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

我该怎么做?


答案 1

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

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

但是,如果你想把重音字符变成一些合理的东西,仍然是ascii,看看这些问题:


答案 2

我正在使用这个。

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

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

这里

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

\W : 非单词字符