7

なぜこれで期待した結果が得られないのか疑問に思っています:

String t = "1302248663033   <script language='javascript'>nvieor\ngnroeignrieogi</script>";
t.replaceAll("\n", "");
System.out.println(t);

出力は次のとおりです。

1302248663033   <script language='javascript'>nvieor
gnroeignrieogi</script>

だから私はなぜ\nまだそこにいるのだろうと思っています。誰か知ってる?\n 何か特別ですか?

編集:

そのため、改行文字と . 正規表現では、DOTALL オプションを使用していることに気付いていないため、今後の参考のためにここで行う必要があることを追加します。

String text = null;
text = FileUtils.readFileToString(inFile);
Pattern p = Pattern.compile("<script language='javascript'>.+?</script>\n", Pattern.DOTALL);
text = p.matcher(text).replaceAll("");
out.write(text);
4

3 に答える 3

20

文字列は不変です。replaceAll呼び出したインスタンスを変更しないなどの文字列操作は、新しい文字列インスタンスを返します。解決策は、変更された文字列を元の変数に割り当てることです。

t = t.replaceAll("\n", "");
于 2011-04-14T03:16:56.747 に答える
1

はい、\n特別です。改行を表すエスケープシーケンスです。実際に希望どおりに解釈するには、文字列リテラルでエスケープする必要があります。次のように、シーケンスの前に \ を追加します。

"\\n"

これで、プログラムは次のようになります。

String t = "1302248663033   <script language='javascript'>nvieor\\ngnroeignrieogi</script>";
t = t.replaceAll("\\n", "");
System.out.println(t);

もちろん、文字列tが実際にプログラムに入力されているのではなく、どこかから来ている場合は、への呼び出しに余分なスラッシュを追加するだけで済みますreplaceAll()

コメントに従って編集しました。

于 2011-04-14T03:20:10.930 に答える