2013-05-21 24 views
1

我正在寫一個程序,其中的一部分需要替換字符串的一部分而不刪除重複項,所以我使用的是不正常工作的replaceFirst()。replaceFirst不起作用,但替換完全相同的輸入?

輸入:

lock: "O_2_^-^" 
str: " O_2_^-^ " 

CODE:

System.out.println(str); 
System.out.println(lock); 
System.out.println(str.contains(lock)); 
str = str.replaceFirst(lock, ""); 
System.out.println(str); 

OUTPUT:

O_2_^-^ 
O_2_^-^ 
true 
O_2_^-^ 

以上是從我的程序實際產出。儘管replace()方法不適用於我目前的情況,但是我測試了它並且輸出結果是完全不同的,正確的是。

輸入:

lock: "O_2_^-^" 
str: " O_2_^-^ " 

CODE:

System.out.println(str); 
System.out.println(lock); 
System.out.println(str.contains(lock)); 
str = str.replace(lock, ""); 
System.out.println(str); 

OUTPUT:

O_2_^-^ 
O_2_^-^ 
true 
    //empty line of output because string was detected and removed. 

我已經試過各種寫我自己的replaceFirst()方法之外,如果任何人有任何意見或輸入,這將是偉大的。謝謝!

回答

4

由於replaceFirst的第一參數被假定爲一個正則表達式,你需要轉義特殊字符。如果您事先不知道lock將會是什麼(例如來自用戶輸入),您可以使用Pattern.quote(lock)來轉義它。

另外,請看short demo

2

replaceFirst需要一個正則表達式。所以你需要相應地逃避你的字符串。 PS:如果要替換的字符串是動態的,則可以使用Pattern.quote(String)爲您轉義它。

+0

具體來說,^是行的開始。 – Jerome

5

replaceFirst(String regex, String replacement)採用正則表達式作爲參數,使用:

String lock = "O_2_\\^-\\^"; 

String lock = "O_2_\\^-\\^"; 
String str = " O_2_^-^ "; 
System.out.println(str); 
System.out.println(lock); 
System.out.println(str.contains(lock)); 
str = str.replaceFirst(lock, ""); 
System.out.println(str); 

OUTPUT:

O_2_^-^ 
O_2_\^-\^ 
false 
+0

+1。您可能想添加關於轉義這些字符的解釋。 – Maroun

相關問題