在java中替换除撇号之外的非字母

时间:2013-09-24 17:39:42

标签: java regex replace ascii

我有一些包含非字母的字符串。

String A = "it's. (fish)[]//;!"

我想返回一个字符串,上面写着:

it's fish

我使用了String.replace()方法,但它有点乏味。我也尝试过使用

 A.replaceAll("\\W", "")

但它删除了撇号。是否有一种简单的方法可以在保留撇号的同时删除所有非字母?

2 个答案:

答案 0 :(得分:2)

您可以使用'\\w添加到否定字符类。我注意到你没有替换空格。然后将其添加到字符类:

String A = "it's. (fish)[]//;!"
A = A.replaceAll("[^\\w' ]", ""); 
System.out.println(A);  // it's fish

这将替换非\\w'或空格的字符。


或者您可以使用字符类和否定字符类的交集:

[\\W&&[^' ]]

但它只适用于Java正则表达式引擎。我不知道是否有任何其他正则表达式引擎支持这一点。

P.S: BTW,A不是一个非常好的变量名。

答案 1 :(得分:1)

您可以在此处使用Java特定构造:

A.replaceAll("[\\W&&[^']]", "")

此处的特定构造是字符类:x&&[y],表示:匹配xyy可以是在字符类中有效的任何内容。

如果我没记错的话,可以从Java 5开始使用。