2016-03-03 2 views
2

Привет, я хочу увеличивать целочисленные значения между строкой. , например, исходная строка - m1p1b1. Этот код работает правильно, но у него есть одна проблема. Когда строка m10p10b10 это дает результат m21p21b21 не m11p11b11. Также целая длина между динамической строкой, поэтому я не могу сделать какой-либо статический код.Приращение цифры внутри строки

Pattern digitPattern = Pattern.compile("(\\d)"); 
      Matcher matcher = digitPattern.matcher("m1p1b1"); 
      StringBuffer result = new StringBuffer(); 
      while (matcher.find()) { 
       matcher.appendReplacement(result, String.valueOf(Integer.parseInt(matcher.group(1)) + 1)); 
      } 
      matcher.appendTail(result); 
      System.out.println(result.toString()); 
+0

Изменить '(\\ d)' to '(\\ d +)' –

ответ

5

Изменить \\d на \\d+, чтобы соответствовать один или несколько цифр:

Pattern digitPattern = Pattern.compile("\\d+"); 
Matcher matcher = digitPattern.matcher("m10p10b10"); 
StringBuffer result = new StringBuffer(); 
while (matcher.find()) { 
    matcher.appendReplacement(result, String.valueOf(Integer.parseInt(matcher.group(0)) + 1)); 
} 
matcher.appendTail(result); 
System.out.println(result.toString()); // => m11p11b11 

См IDEONE demo

Примечание Вы не должны захватить весь узор с (...), вы можете получить доступ к значение с использованием matcher.group(0).

+0

Как мне сделать с методом m.group (0)? – boycod3

+1

Смотрите мой демо код :) Я заменил 'matcher.group (1)' на 'matcher.group (0)'. Обычно я использую 'm' для имени переменной' Matcher'. –

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