Регулярное выражение Java удаляет совпадения из строки - PullRequest
2 голосов
/ 11 июля 2019

Я пытаюсь выяснить, как удалить найденные совпадения из моей строки.Итак, мой пример кода в настоящее время выглядит следующим образом:

public void checkText() {
    String helper = "985, 913, 123, SomeotherText, MoreText, MoreText";
    Pattern pattern = Pattern.compile("\\b\\d{3}");
    Matcher matcher = pattern.matcher(helper);
    while (matcher.find()) {
        String newtext = "Number: " + matcher.group() + "\n"+ newtext;
        helper.replaceAll(matcher.group(),"");
    }
    newtext = newtext + "________________\n"+ helper;
    editText.setText(newtext);
}

Итак, моя входная строка: 985, 913, 123, SomeotherText, MoreText, MoreText

После запуска кода я хотел бы увидеть следующее:

Number: 985
Number: 913
Number: 123
________________________
SomeotherText, MoreText, MoreText

Кто-нибудь может сказать мне, что не так в моем текущем коде?

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Есть несколько вещей, которые вы можете обновить в коде:

  • Вам следует установить возврат замены на helper
  • Если вы заменяете только на пустую строку, ваша строка будет начинаться с , , , при замене, оставляя запятую и следующий пробел
  • Вы можете инициализировать переменную String newtext = "";

См. Java-демонстрацию

Ваш код может выглядеть следующим образом:

String helper = "985, 913, 123, SomeotherText, MoreText, MoreText";
Pattern pattern = Pattern.compile("\\b\\d{3}");
Matcher matcher = pattern.matcher(helper);
String newtext = "";

while (matcher.find()) {
    newtext = "Number: " + matcher.group() + "\n"+ newtext;
    helper = helper.replaceAll(matcher.group() + ", ","");
}
newtext = newtext + "________________\n"+ helper;
System.out.println(newtext);

Результат:

Number: 123
Number: 913
Number: 985
________________
SomeotherText, MoreText, MoreText
0 голосов
/ 11 июля 2019

Поскольку вы уже используете класс Matcher, вы также можете использовать метод Matcher.appendReplacement для замены:

public void checkText() {
    String helper = "985, 913, 123, SomeotherText, MoreText, MoreText";
    Pattern pattern = Pattern.compile("\\b\\d{3}, ");
    Matcher matcher = pattern.matcher(helper);
    StringBuffer sb = new StringBuffer();
    while (matcher.find()) {
        System.out.println("Number:"+matcher.group());
        matcher.appendReplacement(sb, "");
    }
    matcher.appendTail(sb);
    System.out.println(sb.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...