我试过用这个,但没有用

return value.replaceAll("/[^A-Za-z0-9 ]/", "");

当前回答

Java的正则表达式不需要在正则表达式周围加上正斜杠(/)或任何其他分隔符,这与Perl等其他语言不同。

其他回答

使用[^ A-Za-z0-9]。

注意:删除了空格,因为它通常不被认为是字母数字。

Guava的CharMatcher提供了一个简洁的解决方案:

output = CharMatcher.javaLetterOrDigit().retainFrom(input);
return value.replaceAll("[^A-Za-z0-9 ]", "");

这将使空间完好无损。我猜这就是你想要的。否则,从正则表达式中删除空格。

public static void main(String[] args) {
    String value = " Chlamydia_spp. IgG, IgM & IgA Abs (8006) ";

    System.out.println(value.replaceAll("[^A-Za-z0-9]", ""));

}

输出: 衣原体 IgGIgMIgAAbs8006

Github: https://github.com/AlbinViju/Learning/blob/master/StripNonAlphaNumericFromString.java

如果你也想允许不属于ascii字符集的字母数字字符,比如德国变音,你可以考虑使用以下解决方案:

 String value = "your value";

 // this could be placed as a static final constant, so the compiling is only done once
 Pattern pattern = Pattern.compile("[^\\w]", Pattern.UNICODE_CHARACTER_CLASS);

 value = pattern.matcher(value).replaceAll("");

请注意,UNICODE_CHARACTER_CLASS标志的使用可能会导致性能损失(参见该标志的javadoc)。