увеличьте каждую цифру из строки на 1

#java

#java

Вопрос:

 private static void getMethod(String input) {

    Matcher matcher = Pattern.compile("(\d)").matcher(input);
    StringBuffer sb = new StringBuffer();

    while (matcher.find()) {
        matcher.appendReplacement(sb,
                String.valueOf(Integer.parseInt(matcher.group(1))   1));
    }
    matcher.appendTail(sb);
    System.out.println(sb.toString());

}
  

пожалуйста, объясните следующее lines….im не получается….

 Pattern.compile("(\d)");
  

и

 while (matcher.find()) {
matcher.appendReplacement(sb, String.valueOf(Integer.parseInt(matcher.group(1))   1));
}
matcher.appendTail(sb);
  

Комментарии:

1. Вы читали javadoc этих методов?

2. Хм, я лично вроде как забыл, что (\ d) означает в регулярном выражении … учитывает ли это, как учитываются круглые скобки?

Ответ №1:

 Pattern.compile("(\d)");
  

Это простое регулярное выражение с группой, которая будет соответствовать номеру (группы нумеруются с 1, а группа указывается с помощью (), подсчет начинается с левой стороны).

d — короткая версия [0-9]

 while (matcher.find()) {
  

Это простой цикл по всем числам в строке. Эта часть будет соответствовать номеру и поместит его в группу.

 matcher.appendReplacement(sb, String.valueOf(Integer.parseInt(matcher.group(1))   1));
  

Это немного сложнее.

Он помещает все символы из соответствующей строки в sb и заменяет часть, на которой она остановилась.

 String.valueOf(Integer.parseInt(matcher.group(1))   1)
  

Для этого берется строковая версия number (соответствующая find), преобразуется в int, добавляется 1 и выполняется обратный анализ в String

Извините за любые лексические ошибки