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);
}
}
添加回答
举报