2012-06-15 16 views
21

知っている人のための基本的な質問です。regexを使って改行/スペースを空白に置き換えてください。

の代わりに

"This is my text. 

And here is a new line" 

から取得:

"This is my text. And here is a new line" 

私が取得:

"This is my text.And here is a new line. 

任意のアイデアなぜですか?

L.replaceAll("[\\\t|\\\n|\\\r]","\\\s"); 

私は犯人を見つけたと思う。

私は次の操作を行う次の行で

L.replaceAll("[^a-zA-Z0-9|^!|^?|^.|^\\s]", ""); 

そして、これは私の問題を引き起こしているようです。

理由は何ですか?

私は明らかに以下を実行しようとしています:すべての非文字を削除し、新しい行をすべて削除します。

+3

あなたは 'L.replaceAll(" [\\\ t | \\\ n | \\\ r] "、" ");' – benjer3

+0

私は試みましたが、これは動作しないようです。 –

+2

'L.replaceAll(" \\ s + "、" ")'? –

答えて

44

\sは、正規表現内の空白文字のショートカットです。文字列には意味がありません。 ==>置換文字列には使用できません。そこで、挿入したい文字を正確に配置する必要があります。これがスペースの場合は、代わりに" "を使用してください。

もう1つは、なぜ3つのバックスラッシュをエスケープシーケンスとして使用していますか? Javaでは2つで十分です。また、文字クラスに|(代替演算子)は必要ありません。

L.replaceAll("[\\t\\n\\r]+"," "); 

備考

Lは変更されません。あなたは結果を持っているしたい場合は、実行する必要があり

String result =  L.replaceAll("[\\t\\n\\r]+"," "); 

テストコード:

String in = "This is my text.\n\nAnd here is a new line"; 
System.out.println(in); 

String out = in.replaceAll("[\\t\\n\\r]+"," "); 
System.out.println(out); 
+0

'L.replaceAll(" [\\ t | \\ n | \\ r] "、" ");'も動作しないようです。 –

+0

これも今試しました。運がない。 –

+1

文字クラスの後に '+'を追加すると、空白文字の各シーケンスに対して1つのスペースしか得られません。 –

2

あなたの正規表現は良いaltoughである私は、あなたが期待する空の文字列

String resultString = subjectString.replaceAll("[\t\n\r]", ""); 

と交換します「テキスト」の間のスペース。と "右"?

私はあなたのサンプル

"This is my text. " 

をコピーすることによって、正規表現をしようとすると、私はそうすべてはここにもあるそのスペースを取得します。たぶん、空の文字列で置き換えるだけで動作します。なぜあなたは\ sで置き換えるのか分かりません。そして交代|文字クラスでは必要ありません。

+0

私はjaveをやっていませんが、本当に\\ tのようなエスケープ文字を追加する必要がありますか? \ t十分ではありませんか? – buckley

+0

テキストエディタとして何を使用していますか? –

+0

ウインドウ上のUltraeditので、改行は\ r \ n – buckley

7

改行が\r\nまたはちょうど\nのいずれかであるシステムに応じて

L.replaceAll("(\\t|\\r?\\n)+", " "); 

を試してみてください。

+0

これは間違っています。 '?'は文字クラスのリテラルの疑問符を意味します( '|'もここでもリテラルです)。 Javaの場合でも4つのバックスラッシュが残念です。編集:しかし、それは答えを再フォーマットするときに余分なバックスラッシュを取っていないための@ adarshrのせいです:) –

+0

あなたは正しいです。これは、小文字でも動作するはずです。 – Keppil

+0

ああ、申し訳ありませんが、私はそれを認識しませんでした。それは今修正されてうれしい。 – adarshr

3

見つけたthis

String newString = string.replaceAll("\n", " "); 

二重線を使用すると、二重のスペースが得られますが、私はあなたが次に別のものを置き換えて、二重スペースを単一のものに置き換えることができると思います。

それはやってみてください動作しない場合:「\ n」を使用して

string.replaceAll(System.getProperty("line.separator"), " "); 

を私は「文字列」の行を作成した場合、私は正規表現に「\ n」を使用する必要がありました。 System.getProperty()を使用した場合、私はそれを使用しなければなりませんでした。

-1

最初の分割を使用し、空白を使用して再結合することができます。 それが確実になります。

String[] Larray = L.split("[\\n]+"); 
L = ""; 
for(int i = 0; i<Larray.lengh; i++){ 
    L = L+" "+Larray[i]; 
} 
関連する問題