Почему String.replaceAll () не работает с этой строкой? - PullRequest
3 голосов
/ 29 апреля 2010
    //This source is a line read from a file 
    String src = "23570006,music,**,wu(),1,exam,\"Monday9,10(H2-301)\",1-10,score,";

    //This sohuld be from a matcher.group() when Pattern.compile("\".*?\"")
    String group = "\"Monday9,10(H2-301)\"";

    src = src.replaceAll("\"", "");
    group = group.replaceAll("\"", "");

    String replacement = group.replaceAll(",", "#@");
    System.out.println(src.contains(group));
    src = src.replaceAll(group, replacement);
    System.out.println(group);
    System.out.println(replacement);
    System.out.println(src);

Я пытаюсь заменить "," между \"s, чтобы я мог использовать String.split() последний.

Но вышеописанное просто не работает, результат:

true  
Monday9,10(H2-301)  
Monday9#@10(H2-301)  
23570006,music,**,wu(),1,exam,Monday9,10(H2-301),1-10,score,

но когда я изменяю строку src на

 String src = "123\"9,10\"123";  
 String group = "\"9,10\"";

Хорошо работает

true  
9,10  
9#@10  
1239#@10123

Что случилось со строкой ???

1 Ответ

5 голосов
/ 29 апреля 2010

( и ) являются метасимволом регулярных выражений; их нужно экранировать, если вы хотите, чтобы они соответствовали буквально.

String group = "\"Monday9,10\\(H2-301\\)\"";
                            ^        ^

Причина, по которой вам нужны две косые черты, заключается в том, что поскольку \ в строковом литерале сам по себе является escape-символом, то "\\" является строкой длины 1, содержащей косую черту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...