用空字符串替换 Java 括号

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


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

 }


红颜莎娜
浏览 118回答 3
3回答

UYOU

replace和之间有区别replaceFirst。如果您的 IDE 向您显示方法签名,您将看到:看看如何replace接受一个普通的旧target而replaceFirst接受一个regex?"\\("是一个正则表达式,意思是“一个开括号”。replace不会将您传入的字符串视为正则表达式。它只会尝试找到一个反斜杠,后跟一个左括号,这在您的字符串中不存在。如果你想用replace,就用"("。

慕的地10843

为了replace工作,你应该写:a=a.replace("(",""); //First或者replaceAll如果你想通过一个regex:a=a.replaceAll("\\(",""); //Firstreplace接受要替换的字符序列:public String replace(CharSequence target, CharSequence replacement)因此,在您的情况下,它会尝试替换 3 个字符“\(”,而不仅仅是单个字符“(”。

慕沐林林

问题是它运行在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);    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java