3 回答

TA貢獻1878條經驗 獲得超4個贊
replace
和之間有區別replaceFirst
。如果您的 IDE 向您顯示方法簽名,您將看到:
看看如何replace
接受一個普通的舊target
而replaceFirst
接受一個regex
?
"\\("
是一個正則表達式,意思是“一個開括號”。replace
不會將您傳入的字符串視為正則表達式。它只會嘗試找到一個反斜杠,后跟一個左括號,這在您的字符串中不存在。
如果你想用replace
,就用"("
。

TA貢獻1785條經驗 獲得超8個贊
為了replace
工作,你應該寫:
a=a.replace("(",""); //First
或者replaceAll
如果你想通過一個regex
:
a=a.replaceAll("\\(",""); //First
replace
接受要替換的字符序列:
public String replace(CharSequence target, CharSequence replacement)
因此,在您的情況下,它會嘗試替換 3 個字符“\(”,而不僅僅是單個字符“(”。

TA貢獻2016條經驗 獲得超9個贊
問題是它運行在replace多個字符中,因此,它將尋找的是\and (,因此不會發生這種情況,引號應該只包含要替換的字符:
a = a.replace("(", ""); // First
接下來,我將原始提案和固定提案留給狙擊手:
public class Main {
private static final Main initRun = new Main();
public static void main(String[] args) {
String a = "This(rab)(bar)";
System.out.println("Original");
initRun.runOriginal(a);
System.out.println("Fixed");
initRun.runFixed(a);
// Output
// Original
// This(rab)(bar)
// Thisrab)(bar)
// Fixed
// Thisrab)bar)
// Thisrab)bar)
}
/**
* Execute the original proposal
*
* @param a String for replace
*/
void runOriginal(String a) {
a = a.replace("\\(", ""); // First
String b = a.replaceFirst("\\(", "");// Second
System.out.println(a + "\n" + b);
}
/**
* Execute the fixed proposal
*
* @param a String for replace
*/
void runFixed(String a) {
a = a.replace("(", ""); // First
String b = a.replaceFirst("\\(", "");// Second
System.out.println(a + "\n" + b);
}
}
添加回答
舉報