2016-10-13 7 views
4

Есть ли какое-либо решение Java для замены цифры в строке, отличное от того, чтобы получить цифру с помощью соединителя, увеличить его на единицу и заменить?Динамическое инкремент всех чисел внутри строки

«REPEAT_FOR_4» возвращает «REPEAT_FOR_5» «REPEAT_FOR_10» возвращает «REPEAT_FOR_11»

Я хотел бы сделать это в одной строке с регулярным выражением и замены, не перекомпоновкой строку, как «REPEAT_FOR_» и добавить число после инкремента. Спасибо!

Позже редактирование: Я хотел бы знать, как заменить число на следующее в строке.

+1

Да, с 'Matcher # appendReplacement' –

+4

Технически вы не можете« заменить »что-либо в строке« String », потому что объекты« String »неизменяемы. Но вы можете создать новый «String», содержащий старый префикс плюс Integer.valueOf (суффикс) + 1. – Smutje

+0

Да, я знаю. Я уточню свой вопрос. Создайте новую строку: – sonya

ответ

0

Я не использовал регулярное выражение, но вот решение в одной строке. Учитывая, что ваша строка остается неизменной.

public String getIncrementedString (String str){ 
return ("REPEAT_FOR_" + (Character.getNumericValue(str.charAt(11))+1)); 
} 
+1

OP говорит: ** не перестраивая строку как «REPEAT_FOR_» и добавляя номер после инкремента ** – RealSkeptic

+0

, но, похоже, его проблема заключалась в том, что он хотел сделать это в одной строке. –

0

Вы можете попробовать это.

String ss = "REPEAT_FOR_4"; 
int vd = Integer.valueOf(ss.substring(ss.length() - 1)); 
String nss = ss.replaceAll("\\d",String.valueOf(vd+1)); 

System.out.println(nss); 

выход:

REPEAT_FOR_5

с регулярным выражением: если цифра не в конце строки.

String ss = "REPEAT_5_FOR_ME"; 
    Pattern p = Pattern.compile("\\d+"); 
    Matcher m = p.matcher(ss); 
    m.find(); 
    String strb = m.group(); 
    int vd = Integer.valueOf(strb); 
    String nss = ss.replaceAll("\\d",String.valueOf(vd+1)); 

    System.out.println(nss); 

выход:

REPEAT_6_FOR_ME

База по вопросу, поднятому в комментарии комментарии я думаю, что это решение с регулярным выражением поможет.

public static String convStr(String str){ 
    Pattern p = Pattern.compile("\\d+"); 
    Matcher m = p.matcher(str); 
    m.find(); 
    String strb = m.group(); 
    int vd = Integer.valueOf(strb); 
    return str.replaceAll("\\d",String.valueOf(vd+1)); 
    } 
+0

Но если число не находится в конце строки, это не сработает. Я подошел к этому решению: String nrToBeReplaced = CharMatcher.DIGIT.retainFrom (значение); int nextNr = Integer.valueOf (nrToBeReplaced) + 1; return value.replaceAll (значение, String.valueOf (nextNr)); – sonya

+0

@rianna Я обновил свой ответ с помощью регулярного выражения, и он решает проблему, которую вы подняли –

0

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

String str = "REPEAT_FOR_4"; 
    Pattern p = Pattern.compile("([0-9]+)"); 
    Matcher m = p.matcher(str); 
    StringBuffer s = new StringBuffer(); 
    while (m.find()) 
     m.appendReplacement(s, String.valueOf(1+ Integer.parseInt(m.group(1)))); 
    String updated = s.toString(); 
    System.out.println(updated); 

Это a working Example, который возвращает REPEAT_FOR_5 в качестве выходного сигнала.

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

  • Нет связанных вопросов^_^