2017-01-18 60 views
3

考慮下面的代碼:如何正確替換字符串?

String str = "folder1;b"; 
String replacement = "C:\\myfolder"; 
System.out.println(str.replaceAll("b", replacement)); 

這將打印C:myfolder
我該如何用替換字符串替換str? (如果沒有斜槓被刪除)
我試過Pattern.quote(replacement)但打印\QC:\Development\E

我沒有對更換無法控制它來自外部來源,它不知道它的內容是什麼。

+2

在哪裏執行實際更換的代碼? – Reimeus

+0

@Reimeus它在那裏。我正在編輯。 – user7436452

+2

更換後的預期產量是多少? –

回答

4

如果不使用正則表達式,不如用String.replace()

String str = "folder1;b"; 
String replacement = "C:\\myfolder"; 
System.out.println(str.replace("b", replacement)); 

String.replace()做了字面上的替代品,它不能治療的參數爲正則表達式。

我會指出,如果您的strfolder1;bash;b,您將遇到麻煩,因爲兩個b都將被替換。

+0

你仍然需要逃避反斜槓。 –

0

String.replaceAll的第二個參數需要一個正則表達式。在正則表達式世界中,\具有特殊的操作符含義。你必須爲jvm轉義一次,爲正則表達式轉義一次。

String str = "b"; 
String replacement = "C:\\\\\\\\myfolder"; 
System.out.println(str.replaceAll(str, replacement)); 

會打印出

C:\\myfolder 

隨着String.replace它確實需要的文本字符串,因此你只需要一次逃脫它的JVM

String str = "b"; 
String replacement = "C:\\\\myfolder"; 
System.out.println(str.replace(str, replacement)); 

將打印

C:\\myfolder 

最後,如果你不知道如何進入的字符串替換貌似可以用

String str = "b"; 
    String replacement = "C:\\myfolder"; // might be anything 
    String actualReplacement = replacement.replaceAll("\\\\", "\\\\\\\\"); 
    System.out.println(str.replace(str, actualReplacement)); 

事先逃脫它會打印

C:\\myfolder 

以外,你可以使用apache.utils之一實現它,但這裏沒有任何第三方庫。

0

String.replaceAll使用正則表達式。你不需要那個。

試試這個:

String str = "b"; 
String replacement = "C:\\myfolder"; 
System.out.println(str.replace(str,replacement); 
+0

不,它是字符串的一部分。新字符串將在其中包含斜槓。 –

+0

酷他刪除了他的問題,現在它看起來像我瘋了,自言自語^^ –

+0

我在我的腦海中有類似的聲音 –