2012-05-04 6 views
3
String foo = "a3#4#b"; 
String afterPunctutationRemoval = foo.replaceAll("[,.;:?!'-_\"/()\\{}]", ""); 
System.out.println(afterPunctutationRemoval); 

それは私に "a ## b"という結果をもたらします。なぜ誰かが私に説明することができますか?replaceAllがStringから数値を削除するのはなぜですか?

文字列をそのまま返してはいけませんか?

答えて

11

あなたのキャラクタークラスには、数字と一致する範囲' .. _が含まれています。

文字クラスの開始または終了時に-を置く:

foo.replaceAll("[,.;:?!'_\"/()\\{}-]", "") 

またはそれをエスケープ:

foo.replaceAll("[,.;:?!'\\-_\"/()\\{}]", ""); 
5

'-_は、'_の間のすべての文字に一致します。

0

、他の二人は-文字エスケープ、言ったように - \\-を。

また、\\{{と同じですが、これは意図したものですか?そうでない場合は、バックスラッシュをエスケープしてみてください - \\\\{

+0

も ​​'" "'を返すべきです。 '.'文字はすべての文字に評価されるはずです。 – m12

関連する問題