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

标签 java string

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

我该怎么做?

最佳答案

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

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 的合理字符,请查看以下问题:

关于java - 如何替换字符串中的特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4283351/

相关文章:

string - 为什么这个字符串的引用计数为 4? (德尔福2007)

java - AES与Rijndael的关键时间表

java - 如何确定每个文档中术语的术语频率?

c++ - 阅读字符串和 double

java - 在java中获取分隔字符串的长度?

java - 如何在引号之间输出字符串(在控制台中)?

java - Hibernate什么时候从二级缓存读取,什么时候从DB读取?

java - 自动转换Java源中的属性文件

java - 使用 AWS JAVA SDK 使用查询参数作为身份验证方法进行 V4 身份验证的 S3 操作

c++ - 为什么 "\?"在 C/C++ 中是一个转义序列?