0

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

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

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

it's fish

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

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

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

4

2 回答 2

2

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

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

这将替换不是\\w,'或空格的字符。


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

[\\W&&[^' ]]

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

PS:顺便说一句,A不是一个很好的变量名。

于 2013-09-24T17:40:43.927 回答
1

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

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

这里的具体构造是字符类:x&&[y],意思是:匹配xyy 可以是任何在字符类中有效的东西。

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

于 2013-09-24T17:41:10.203 回答