用空字符串替换Java括号

时间:2019-03-10 09:12:02

标签: java string replace

为什么第一行不用空字符串替换“(”,而第二行呢?

 public static void main(String []args){
     String a="This(rab)(bar)";
     a=a.replace("\\(",""); //First
     String b=a.replaceFirst("\\(","");//Second
    System.out.println(a + " "+b);
 }

3 个答案:

答案 0 :(得分:4)

replacereplaceFirst之间存在区别。如果您的IDE向您显示了方法签名,您将看到:

enter image description here

看看replace如何接受普通的targetreplaceFirst如何接受regex

"\\(" regex ,表示“单个圆括号”。 replace不会将您传入的字符串视为正则表达式。它将仅尝试查找反斜杠,然后在其字符串中不存在带括号的反括号。

如果要使用replace,只需使用"("

答案 1 :(得分:3)

要使replace工作,您应该写:

a=a.replace("(",""); //First

或如果要传递replaceAll,请使用regex

a=a.replaceAll("\\(",""); //First

replace接受要替换的字符序列:

public String replace(CharSequence target, CharSequence replacement)

因此,在您的情况下,它将尝试替换3个字符“ \(”,而不仅仅是单个字符“(”。

答案 2 :(得分:0)

问题在于它以几个字符在replace中运行,因此,它将查找\(,因此不会发生引号应仅包含要替换的字符

    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);
    }
}