2013-09-04 4 views
1

Я хочу заменить xx* на x.Java Регулярные выражения специальные чаевые

Я попытался string.replaceAll("xx*", "x");

, но в регулярном выражении * является особенным, поэтому мне нужно дать \* но дать \ в Java я должен дать \\

==> в конце концов, он должен работать с string.replaceAll("xx\\*", "x");

, но когда строка содержит xx*, вышеуказанное заявление не сработало при замене xx* на x

Пожалуйста, помогите скоро Спасибо

ответ

1

Строки неизменны. Назначают результат replaceAll к исходному значению

string = string.replaceAll("xx\\*", "x"); 
+1

Конечно вы имеете в виду "хх \\\ *"? – Joe

+0

@Joe да действительно вставить manfunction, исправлено :) – Reimeus

+0

Мне пришлось попробовать набирать это три раза. Кажется, ошибка с StackOverflow. – Joe

0

Использование string.replaceAll("xx\\*", "x"); вместо string.replaceAll("xx\*", "x");

Это работает отлично.

Демо-версия: here.

1

string.replaceAll("xx\\*", "x") не изменит данную строку, так как строки неизменны в Java. Вы должны использовать возвращаемое значение, например, путем присвоения его обратно к исходной переменной: string = string.replaceAll("xx\\*", "x")

6
  1. Вы должны передать результат replaceAll() вызова переменной строки - этот метод возвращает новую строку в отличие от изменения строки, на которую вы ее вызываете.

  2. Не используйте replaceAll() !! Используйте replace() при работе с строковых литералов:

    string = string.replace("xx*", "x"); 
    
+3

+1, чтобы единственный человек понял, что для этой операции не требуется решение на основе регулярных выражений. Как грустно для других ... – Bohemian

+0

Я бы хотел добавить: Если вам действительно нужно использовать replaceAll() и его регулярное выражение, но вы не хотите анализировать и избегать первого параметра, вы можете использовать метод Pattern.quote() это делает это для вас – Grimmy

Смежные вопросы