Замена скобок Java пустой строкой - PullRequest
6 голосов
/ 10 марта 2019

Почему первая строка не заменяет "(" пустой строкой, а вторая -?

 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 ]

4 голосов
/ 10 марта 2019

Существует разница между replace и replaceFirst.Если ваша IDE показывает вам сигнатуры методов, вы увидите:

enter image description here

Посмотрите, как replace принимает простой старый target, тогда как replaceFirst принимает regex?

"\\(" - это регулярное выражение , что означает «одна открытая скобка».replace не обрабатывает передаваемые вами строки как регулярные выражения.Он просто попытается найти обратную косую черту, за которой следует открывающая скобка, которой нет в вашей строке.

Если вы хотите использовать replace, просто используйте "(".

3 голосов
/ 10 марта 2019

Чтобы replace работал, вы должны написать:

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

или использовать replaceAll, если хотите передать regex:

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

replace принимаетпоследовательность символов для замены:

public String replace(CharSequence target, CharSequence replacement)

Поэтому в вашем случае он пытается заменить 3 символа "\ (", а не только один символ "(".

0 голосов
/ 10 марта 2019

Проблема в том, что он работает в 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...