3 回答

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

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

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
問題是它運(yùn)行在replace多個(gè)字符中,因此,它將尋找的是\and (,因此不會(huì)發(fā)生這種情況,引號(hào)應(yīng)該只包含要替換的字符:
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);
}
}
添加回答
舉報(bào)