16

文字列を配列に分割してに置き換えようとしまし\\\が、それができませんでした。また、String.replaceAllをこのように試しました("\","\\");

JNIへのパスを指定したいのですが、この方法でのみ読み取ります。

4

4 に答える 4

33

この場合は使用しないでくださいString.replaceAll。これは正規表現で指定されているため、さらにエスケープする必要があります。これは問題ないはずです:

String escaped = original.replace("\\", "\\\\");

Java文字列リテラルに含まれているため、バックスラッシュが2倍になっていることに注意してください。したがって、ここに含まれる実際の文字列は「シングルバックスラッシュ」と「ダブルバックスラッシュ」であり、2倍と4倍ではありません。

replace単純な文字列で機能します-正規表現は含まれません。

于 2011-09-23T22:04:43.347 に答える
2

You could use replaceAll:

String escaped = original.replaceAll("\\\\", "\\\\\\\\");
于 2012-09-24T11:54:36.323 に答える
1

JNIへのパスを指定したいのですが、この方法でのみ読み取ります。

そうではありません。プログラミング言語で宣言するリテラル文字列には、二重の円記号のみが必要です。実行時にこの置換を行う必要はありません。なぜこれをしているのかを再考する必要があります。

于 2011-09-24T02:30:04.780 に答える
0

「\」はJavaではエスケープ文字と見なされるため、これに対処するのはかなりの冒険になる可能性があります。文字列では常に「\」「」を使用する必要があります。ただし、「\」は正規表現でもエスケープ文字であるため、正規表現で「\」を使用したいときに楽しみが始まります。したがって、単一の「\」の場合、正規表現で「\\」を使用する必要があります。

これが私がこの情報を見つけたリンクです:https ://www.rgagnon.com/javadetails/java-0476.html

'\'を'\\'に変換する必要がありました。私たちが使用できる場所を見つけました:

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

そしてそれは動作します。以下に、私がどのように実装したかのイメージを示します。

https://i.stack.imgur.com/LVjk6.png

于 2020-04-28T11:06:32.240 に答える