2013-09-24 176 views
0

我有幾個字符串包含非字母。在java中替換非撇號除撇號外

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

我想返回一個字符串,上面寫着:

it's fish 

我已經使用了與string.replace()方法,但它是一個有點乏味。我也試過使用

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

但它刪除了撇號。有一個簡單的方法來刪除所有非字母,同時保留撇號?

回答

1

您可以在這裏使用一個Java具體構造:

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

的具體構造這裏的字符類:x&&[y],意思是:匹配xyy可以是在角色類中有效的任何東西。

自Java 5以來可用,如果我記得正確。

+0

你的交集不正確。應該是'[\\ W && [^']] @ –

+1

@RohitJain感謝您的糾正,修正 – fge

2

您可以將'添加到否定字符類\\w。我注意到你沒有替換空格。然後也添加到字符類:

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

這將替換不在\\w'或空格字符。


或者你可以使用字符類的交集和否定字符類:

[\\W&&[^' ]] 

,但只在Java正則表達式引擎的工作原理。我不知道是否有任何其他正則表達式引擎支持這一點。

P.S:順便說一句,A不是一個很好的變量名。

+0

我該如何修改這個,這隻有在工作僅僅在1秒之後纔有效?例如,不fish'ss或魚'.. – lost9123193

+0

我不明白你的問題。 –

+0

如果字符串是「fish'sss」,它會返回「fish sss」,但如果是魚的話,它會返回魚的。 – lost9123193