2017-04-26 13 views
1

私は単語間のスペースを維持しながら、すべての非アルファベット文字を置き換えたい:アルファベット以外の文字を削除するにはどうすればよいですか?

String words = "game, rock, 456, pop, %"; 

結果は次のようになります。

String processedWords = "game rock pop"; 

私はこのコードを実行しようとした:

String processedWords = words.replaceAll("[^A-Za-z0-9]", "").replace(",","")); 

しかし、それは私に空白なしの結果を与える。

+4

あなたの正規表現 '[^ A-Za-z0-9 \ s]'に '\ s'を追加してください。 - –

+1

あなたのキャラクターグループにスペースを入れてください。 – f1sh

+1

これに加えて、結果の文字列の前または後ろにスペースを入れたくない場合は、結果のStringに対してtrim()を呼び出さなければなりません。 – mdewit

答えて

1

をお試しくださいcharctersをフィルタリングして、交換するmacthed: -

 Pattern p = Pattern.compile("[A-Za-z]+"); 
     Matcher m = p.matcher("game, rock, 456, pop, %"); 
     List<String> resultList = new ArrayList<String>(); 
     while (m.find()) { 
      resultList.add(m.group()); 
     } 
     System.out.println(StringUtils.join(resultList , " ")); 
+0

'.replace("、 "、" ")'は冗長です。 'replaceAll'の結果にはカンマがありません。 – slim

1

スペースで "" ちょうどあなたがパターンを使用することができます9

String processedWords = words.replaceAll("[^A-Za-z0-9 ]", ""); 
+0

複数のスペースを1つのスペースに減らすためにこのソリューションを採用するにはどうすればよいですか? – Dinosaurius

+0

OPは "空白"ではなく "空白"と言いました。ですから、 '\ s'ではなく、リテラルスペースのcharを使うべきです - おそらく、複数のスペースを1つに減らすことについて議論するでしょう。 – slim

+0

@slim: "[^ A-Za-z0-9 \ s]"と書いた場合、「不正なエスケープ文字が文字列の横にある」と表示されます。 – Dinosaurius

0

の後にスペースを保つこの

String processedWords = words.replaceAll("[^A-Za-z0-9\\s]", ""); 
+1

これはあまりに精巧な解決策ですが、もしあなたがこれを行っても、 'replaceAll'のない' StringUtils.join(resultList、 "")はどうですか? – slim

関連する問題