こんにちは、のような文字列があります"ami\\303\\261o"
。に置き換え\\
たい\
。
私たちは以下を試しました:
replace("\\", "\")
replaceAll("\\", "\")
しかし、適切な出力が得られませんでした。
Java 正規表現で使用するには、バックスラッシュを 2 回エスケープする必要があります。
resultString = subjectString.replaceAll("\\\\\\\\", "\\\\");
\\
「文字通りのバックスラッシュ」を意味します。"\\"
は、単一のバックスラッシュをエンコードします。"\\\\"
"\\\\\\\\"
に応じて です。バックスラッシュのエスケープを念頭に置いておく必要があります。使用する
public class so {
public static void main(String[] args) {
String s = "ami\\\\303\\\\261o";
System.out.println(s);
s = s.replace("\\\\", "\\");
System.out.println(s);
}
};
各バックスラッシュは、次のバックスラッシュをエスケープし、2 つのリテラル文字列\\
と\
またString.replace
、変更された文字列を返し、元の文字列をそのまま保持することに注意してください。
ここでは正規表現は必要ありません。スラッシュをエスケープして replace() を使用します
someString.replace('\\\\', '\\');
これは、入力文字列の内部がJava Escape Character\\
のために内部的に置き換えられる\
ためです。
つまり、正規表現を実行せずに文字列を出力すると、次のようになります。 "ami\303\261o"
一般に、すべてのエスケープ文字をそれ自体でエスケープ することを忘れないでください。
\ -> escaped = \\
\\ -> escaped = \\\\
\\\ -> escaped = \\\\\\
...and so on
以下のコードを試してください
String val = "ami\\303\\261o";
val =val.replaceAll("\\\\", "\\\\");
System.out.println(val);
出力は
あみ\303\261o
ここで Fiddle が作成されます。確認してください。