我有一些包含非字母的字符串。
String A = "it's. (fish)[]//;!"
我想返回一个字符串,上面写着:
it's fish
我使用了String.replace()方法,但它有点乏味。我也尝试过使用
A.replaceAll("\\W", "")
但它删除了撇号。是否有一种简单的方法可以在保留撇号的同时删除所有非字母?
答案 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]
,表示:匹配x
和y
。 y
可以是在字符类中有效的任何内容。
如果我没记错的话,可以从Java 5开始使用。