2016-11-22 3 views
-2
String mGateway = "null," 
String mGateway2 = ",nullnull" 
String mGateway3 = ",,,,null," 
mGateway.replaceAll("[null,]",""); 

たとえば、すべてのカンマ(、)とすべての単語「null」を何も置き換えません。 System.out.println(mGateway)System.out.println(mGateway2)、およびSystem.out.println(mGateway3)の出力はすべて空白にする必要があります。文字列内の文字と単語を何も置き換えない方法はありますか?

+0

部分文字列と文字の組み合わせであるため、重複していません。 – santafebound

+1

'replace'は正規表現を使わず、' replaceAll'は正規表現を使いません。また正規表現の '[...]'は*シングル*文字セットです(または他の人がクラスと呼ぶ)。だから、 '[null、]'は 'n'を表します。' 'OR'''は' '(' 'は関係ありません)OR''です。つまり、 'null、not 'のような文字列の' replaceAll( "[null、]"、 "") 'は' ot'を返します。 – Pshemo

+1

また、文字列は不変なので、 'replace'は元の文字列を変更せず、置き換えられたデータを持つ新しい文字列を返します。 'original = original.replace(foo、bar)'のような元の文字列を保持していた参照であっても、この結果をどこかに保存したい。 – Pshemo

答えて

2

ようになります。従って"")。

1

最初の文字列はすべて変更できません。つまり、状態を変更できないため、保持している文字を変更することはできません。 replaceメソッドは元のStringに基づいて置き換えられた文字で新しいStringを作成するので、元のStringを保持していた参照であっても、返されたStringのどこかに格納する必要があります。

例:

String myText = "foo bar"; 

// this doesn't change string held by `myText` 
myText.replace("foo", "x"); 

// this assigns new string with replaced characters to `res` 
String res = myText.replace("foo", "x"); 

しかし、あなたはまた、第二の問題を持っています。 [...]構文に基づいて、正規表現を使用したいと思われますが、replaceはそれをサポートしていません。あなたがしたいのはreplaceAllです。正規表現[...]における最後

ので[null,]を表し、characters set単一を表す場合であり、単一の文字セット:n OR u OR l(第lは無関係である)OR ,を。単語を見つけたい場合は[...]を使用できません。 |で表されるOR演算子が必要です(他の多くの言語のように)。

だからあなたのコードでは、私もnull一部はまた、それらから削除されますので、あなたはあなたのtextnullableのような言葉を持っていないと仮定しています

String replaced = text.replaceAll("null|,", ""); 

ようになるはずです。別の単語の一部と一致するときの状況を避けたい場合は、その単語をword boundaries \bで囲むことができます。これは、アルファベット文字とアルファベット以外の文字の間の場所を表します(テキストの開始/終了も含みます)。 (したがって、この空の文字列でnullまたは,を交換

mGateway.replaceAll("\\bnull\\b|," , ""); 

ので、より安全な解決策は、のようにregex\\bを使用し、正確な単語を置き換えるには

String replaced = text.replaceAll("\\bnull\\b|,", ""); 
+0

@Meghan Armesは私の編集があなたの提案を消したので私の投稿を修正しようとしているあなたを見ていない(http://stackoverflow.com/review/suggested-edits/14371707)。もしあなたが再びそれを書くことを喜んで私はそれを受け入れるように自由に感じる。私に知らせていない場合、あなたの提案に基づいて自分自身でこの投稿を編集します。 – Pshemo

+0

心配する必要はありません - それは多分、最終的に多くを追加しないニッキーのものでした。あなたの答えは素晴らしいです、なぜそれがdownvotedされたのか分かりません。私は早くそれを上回った。それは非常に詳細で有用です。将来の参照のためにブックマークする。 :) –

+1

@MeghanArmesいいえ、私は人々が私の間違いを訂正するのが好きです。私は自分の英語がそれほど良くないと知っているので、どんな改善/提案も大歓迎です:)下降についての心配もありません。もしダウン投票者がこの答えに間違っているものを指し示すことができないならば、単純なルール "憎むべき憎しみ"がそれを説明しているようだ。戦術的なダウン投票もありますが、それは私をさらに悩ませるものです。 – Pshemo

関連する問題