字符串中所有数字的动态增量

时间:2016-10-13 14:08:18

标签: java regex string replace matcher

除了使用匹配器获取数字之外,是否存在替换字符串中的数字的Java解决方案,将其递增1并替换它?

“REPEAT_FOR_4”将返回“REPEAT_FOR_5” “REPEAT_FOR_10”将返回“REPEAT_FOR_11”

我想在一行中使用正则表达式替换,而不是将字符串重新组合为“REPEAT_FOR_”并在递增后添加数字。 谢谢!

稍后编辑:我想知道如何用字符串中的下一个替换数字。

3 个答案:

答案 0 :(得分:0)

我没有使用正则表达式,但这里是一行中的解决方案。考虑到你的字符串保持不变。

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

答案 1 :(得分: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));
  }

答案 2 :(得分:0)

是的,当然有可能。使用正则表达式PatternMatcher,以下是您需要做的事情:

    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作为输出。