42

知っている人のためのかなり基本的な質問。

から取得する代わりに

"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]", "");

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

理由はありますか?

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

4

7 に答える 7

68

\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);
于 2012-06-15T10:38:02.113 に答える
9

改行区切りは、OS によって異なります。Windows では「\r\n」、Linux では「\n」です。

安全のために、正規表現パターン\R (Java 8 で導入された改行マッチャー) を使用できます。

String inlinedText = text.replaceAll("\\R", " ");
于 2019-01-01T16:01:11.367 に答える
3

あなたの正規表現は良いですが、空の文字列に置き換えます

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

「テキスト」の間にスペースが必要です。と「そして」ですよね?

サンプルをコピーして正規表現を試すと、そのスペースが得られます

"This is my text. "

だから、ここではすべて順調です。空の文字列に置き換えるだけでうまくいくかもしれません。\s に置き換える理由がわかりません。そして交代 | 文字クラスでは必要ありません。

于 2012-06-15T10:40:04.370 に答える