5

多くのエスケープされた二重引用符を含む長い Java 文字列があります。

// Prints: \"Hello my name is Sam.\" \"And I am a good boy.\"
System.out.println(bigString);

エスケープされた二重引用符 ( ) をすべて削除し\"、通常の二重引用符 ( ) に置き換えて、次の"ようにします。

// Prints: "Hello my name is Sam." "And I am a good boy."
System.out.println(bigString);

これは仕方のないことだと思いました。私の最善の試み:

bigString = bigString.replaceAll("\\", "");

次の例外をスローします。

インデックス 1 付近で予期しない内部エラーが発生しました

何か案は?前もって感謝します。

4

4 に答える 4

16

誰もがあなたに使うように言っていますreplaceAll、より良い答えは本当に使うことreplaceです。

replaceAll-正規表現が必要です

replace[javadoc] -単なる文字列検索と置換

だからこのように:

bigString = bigString.replace("\\\"", "\"");

正規表現が必要ないため、これも高速であることに注意してください。

于 2013-02-14T21:11:08.853 に答える
4

すべてを置き換えるには正規表現を使用するため、別のセットを追加します\\

bigString = bigString.replaceAll("\\\\\"", "\"");

理由の説明: 「\」は Java によって通常の として解釈されます\。ただし、パラメータでそれだけを使用すると、正規表現になります\\正規表現の Aは、次の文字をエスケープします。何も見つからないため、例外がスローされます。

Java で記述する"\\\\\""と、最初に Java によって正規表現として扱われます\\"。これは、正規表現の実装によって「バックスラッシュとそれに続く二重引用符」として扱われます。

于 2013-02-14T21:03:35.993 に答える
1
  String str="\"Hello my name is Sam.\" \"And I am a good boy.\"";
  System.out.println(str.replaceAll("\\\"", "\""));

出力:

 "Hello my name is Sam." "And I am a good boy."
于 2013-02-14T21:04:21.060 に答える
0

replaceAll の最初の引数は正規表現です。有効な正規表現ではない \ を渡します。試す:

bigString.replaceAll("\\\\", "");
于 2013-02-14T21:05:19.140 に答える