Как вставить обратную косую черту перед каждой трубой - PullRequest
0 голосов
/ 21 октября 2019

Я хочу вставить обратную косую черту перед каждым каналом:

// What i want
MyList.replaceAll(item -> item.replaceAll("|" , "\|")); 
// what i´ve tried that does not work
MyList.replaceAll(item -> item.replaceAll("\\|" , "\\|"));

при выполнении кода я получаю «недопустимый escape-символ в строковом литерале».

благодарю вас за помощь Thx:D

Ответы [ 2 ]

5 голосов
/ 21 октября 2019

То есть вы хотите буквальную обратную косую черту в строках? Это хорошая загадка:

String item = "This | is | a | sample".replaceAll("\\|" , "\\\\|");
System.out.println(item);

печатает:

This \| is \| a \| sample

Почему это так?
Вы должны избежать буквального обратного слеша с помощью другого обратного слеша в строке Javaлитералы. То же самое относится и к специальным символам RegEx. Таким образом, в приведенном выше примере вы хотите сопоставить каждый литерал |, поэтому перед ним ставится \ (экранирование RegEx) и другой \ (экранирование строки Java для первого \).

2 голосов
/ 21 октября 2019

String::replaceAll принимает регулярное выражение в качестве первого параметра - о том, как его использовать, проверьте ответ mumpitz .

В качестве другой души вы можете использовать метод String::replace, который принимает два CharSequence параметра:

String item = "This | is | a | sample".replace("|" , "\\|");
System.out.println(item);

Вывод:

This \| is \| a \| sample

Я использовал пример, предоставленный mumpitz - надеюсь, это нормально :)

...