Как использовать Matcher.replaceAll в Java? - PullRequest
1 голос
/ 11 февраля 2011

У меня есть файл, который содержит "(*" и "*)". Я хочу удалить все между этими двумя последовательностями символов. я использовал следующий код, но он ничего не сделал с моей строкой.

    String regex = "\\(\\*.*\\*\\)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    matcher.replaceAll("");

«вход»:

(* This program prints out a message. *)

program is

  begin
    write ("Hello, world!");
  end;

1 Ответ

2 голосов
/ 11 февраля 2011

Вам нужно захватить возвращаемое значение вашего сопоставителя - метод replaceAll возвращает замененную строку.

Кроме того, используйте регулярное выражение, чтобы соответствовать тому, что вы хотите сопоставить, на этот раз строка в скобках.Если у вас нет странных входных данных, это может выглядеть следующим образом:

String regex = "\\(\\*.*\\*\\)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
String result = matcher.replaceAll("(\\*\\*)");
System.out.println(result);

Это регулярное выражение фактически охватывает весь регион от начала первого комментария до конца последнего комментария, что обычно неты хочешь.Чтобы позволить ему соответствовать не жадным (неохотно), используйте это регулярное выражение: \(\*.*?\*\) (с двойной обратной косой чертой в Java.)

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