замена специальных символов на .replaceAll - PullRequest
2 голосов
/ 16 июня 2011

Здравствуйте, я хочу заменить следующие символы в строке

String a = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A";    
System.out.println(a);
String x  = a.replaceAll("~^", "");
System.out.println(x);

однако мой вывод:

20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A
20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A

Так ясно, что что-то не так!

Я запустил его с escape-символами:

 String x  = fix.replaceAll("\\~^", "\\");

Все тот же вывод. Есть ли что-то связанное с ~ я не знаю?

Я должен сделать то же самое для:

~! ~ ^

~!

все в одной строке, я рисую 3. Однако я не могу заставить работать даже самое простое: S

отредактировано: по какой-то причине удалено

Edit2: он должен заменить ~ ^ на поле с символами, которое выглядит как []

Ответы [ 3 ]

5 голосов
/ 16 июня 2011

Из того, что я могу вам сказать, вам вообще не нужно регулярное выражение?

Если регулярное выражение не требуется, вы можете использовать replace вместо replaceAll, что также заменит все вхождения, но не будет интерпретировать первый аргумент как регулярное выражение (см. String.replace )

String a = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A";    
System.out.println(a);
String x  = a.replace("~^", "");
System.out.println(x);

Будет выведено:

20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A
20001=EDTS20002=USA20003=117087187520004=120005=0773=665=453=2448=0A
2 голосов
/ 16 июня 2011

^ соответствует началу входной строки, поэтому ваше регулярное выражение ~^ не может ничего совпадать.Вам нужно будет экранировать его, чтобы соответствовать литералу "^":

String x  = a.replaceAll("~\\^", "");

Обратите внимание, что ~ не является специальным символом и не требует экранирования.хотите заменить ~!, ~!~^ и ~^ за один раз, попробуйте:

String x  = a.replaceAll("~!~\\^|~!|~\\^", ""); 
1 голос
/ 16 июня 2011

^ в регулярном выражении означает начало строки, поэтому я предполагаю, что java интерпретирует это таким образом, и в этом случае шаблон никогда ничего не будет соответствовать.Вам нужно экранировать с помощью обратной косой черты, удвоенной, чтобы пройти через Java, поэтому "~ \\ ^".

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