除了使用匹配器获取数字之外,是否存在替换字符串中的数字的Java解决方案,将其递增1并替换它?
“REPEAT_FOR_4”将返回“REPEAT_FOR_5” “REPEAT_FOR_10”将返回“REPEAT_FOR_11”
我想在一行中使用正则表达式替换,而不是将字符串重新组合为“REPEAT_FOR_”并在递增后添加数字。 谢谢!
稍后编辑:我想知道如何用字符串中的下一个替换数字。
答案 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)
是的,当然有可能。使用正则表达式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
作为输出。