2

java(Android)で置き換えようとして'\\''/'ますが、これは機能しないようです!

String rawPath = filePath.replace("\\\\", "/");

これの何が問題になっていますか?「\」をエスケープして「/」をエスケープしようとしましたが、無駄になりました。元の文字列には何も起こりません。

    filePath = abc\\xyz(not after escaping two \\, the original string is with two \\)
    rawPath = abc \ xyz
    expected = abc/xyz

これを行う正しい方法は何ですか?(別のWindowsファイルからAndroidへのパス変換の確率)

4

7 に答える 7

11

バックスラッシュを使用String.replace(String, String)する場合、2 回エスケープする必要はありません (使用するreplaceAll場合は、正規表現を処理します)。そう:

String rawPath = filePath.replace("\\", "/");

またはcharバージョンを使用:

String rawPath = filePath.replace('\\', '/');
于 2012-07-16T17:35:35.540 に答える
6

quad-druple エスケープは必要ありません。

\\\\

、ただ単に

\\

.

于 2012-07-16T17:34:37.087 に答える
6

単一のスラッシュでエスケープするだけで十分です。以下は私にとってはうまくいきます。

String rawPath = filePath.replace("\\", "/");

于 2012-07-16T17:35:12.513 に答える
3
public static void main(String[] args) {
    String s = "foo\\\\bar";
    System.out.println(s);
    System.out.println(s.replace("\\\\", "/"));     
}

印刷します

foo\\bar
foo/bar
于 2012-07-16T17:39:31.643 に答える
2

元の文字列の 2 つのバックスラッシュのシーケンスを 1 つのスラッシュに置き換えたい場合は、次のようにします。

String filePath = "abc\\\\xyz";
String rawPath = filePath.replace("\\\\", "/");

System.out.println(filePath);
System.out.println(rawPath);

出力:

abc\\xyz  
abc/xyz
于 2012-07-16T17:39:03.087 に答える
1

そもそも文字列に 2 つのバックスラッシュが本当にありますか? これは、Java ソース コードにのみ表示されます。実行時にはバックスラッシュは 1 つだけです。したがって、タスクはバックスラッシュをスラッシュに変更することになります (なぜですか?)。を使用している場合は正規表現が必要ですreplaceAll()。これには、コンパイラ用に 2 つ、正規表現用に 2 つ、4 つが必要ですが、それを使用していないため、正規表現ではない を使用しているreplace()ため、必要なのは、コンパイラ用とそれ自体用の 2 つだけです。

なぜあなたはこれをやっている?Java のファイル パスにバックスラッシュを使用する必要はまったくありません。また、それらを使用して URL のようなことを行う場合を除き、それらを / に変換する必要もありません。その場合、File.toURI()メソッドと URI および URL クラスがあります。そのために。

于 2012-07-17T02:36:42.003 に答える