2017-07-12 15 views
-3

パス内で単一のスラッシュをダブルスラッシュに置き換えますが、ダブルスラッシュは影響を受けません。 私は、次の試してみました:スラッシュを置き換える方法

string oldPath = "\\new\new1\new2\"; 
string newPath = old.replace("\\", "\\\\"); 

私の予想結果は次のようにnewPathがあるということである:

\nが新しい行として解釈されているためである
"\\new\\new1\\new2\\" 
+0

どのようなエラーが発生していますか? – gprathour

+2

実際の実行可能コード、特に入力文字列を表示してください。 *文字列が実際に '\ n'を含んでいれば、置換する' '\'はありません。 – luk2302

+2

'\ n'は改行文字です。あなたの文字列は\ newNEWのようですLINEew1NEW LINEew2 – Jens

答えて

1

。もう一度エスケープしてください。

とにかく、Stringの代わりにjava.nio.file.Pathを使用して、ファイルとディレクトリパスを操作してください。また、ファイルセパレータ\ \ /を使用する場合は、System.getProperty("file.separator")を使用してください。 UNIXベースのシステムで

は、パスの区切りは /次のとおりです。すべての

/** 
* Succeeds on Unix-based systems. On Windows, replace test Path and expected Path file separators 
* with backslash(es). 
*/ 
@Test 
public void test() { 
    final Path oldPath = Paths.get("//new/new1/new2"); 
    final String newPath = oldPath.toString().replace(System.getProperty("file.separator"), 
      System.getProperty("file.separator") + System.getProperty("file.separator")); 
    System.out.println(System.getProperty("file.separator")); 
    System.out.println(newPath); 
    assertEquals("//new//new1//new2", newPath); 
} 
+0

良い答え。唯一のことは、 'newPath'は' //// new // new1 // new2'です。 –

+0

私は思っていません、テストケースを実行;) – kerner1000

+0

私はコメントを書いた前にしました。テストではありませんが、 'newPath'は' \\\\ new \\ new1 \\ new2'としてコンソールに表示されます。 –

1

まず、あなたのoldPathはJavaで有効な文字列ではありません。それは特殊文字である\で終わり、何かが続く必要があります。最後に\\であると仮定しましょう。

この他にも、コメントに記載されている@Jensのように、\nは改行記号なので、javaは文字列を\new(new_line)ew1(new_line)ew2\と認識します。あなたの結果は\\new\\new1\\new2\\としてを表示するようにしたい場合

さて、あなたはreplace方法の順序は、その場合に重要であることを、この

String newPath = old.replace("\\", "\\\\").replace("\n", "\\\\n"); 

お知らせを使用する必要があります。

関連する問題