我需要将每个数字字符串增加两次。例如“32abcd54ab2abcd5”应该是“64abcd108ab4abcd10”。有没有办法使用正则表达式来做到这一点,但不编写特殊函数?
import java.util.regex.*;
class Test
{
public static void main(String[] args)
{
String s= "2aaa3bbb4";
Pattern p1 = Pattern.compile("(\\d+)");
Matcher m1 = p1.matcher(s);
String newString = m1.replaceAll(Integer.parseInt("$1") * 2 + "");
}
}
最佳答案
您可以在 Matcher#replaceAll
中使用 lambda作为自 Java 9 以来的替换参数:
String s= "2aaa3bbb4 67";
Pattern p1 = Pattern.compile("\\d+");
Matcher m = p1.matcher(s);
String result = m.replaceAll(x -> String.valueOf(Integer.parseInt(x.group()) * 2) );
System.out.println( result );
// => 4aaa6bbb8 134
旧 Java 版本的变体应基于 Matcher#appendReplacement
:String s= "2aaa3bbb4 67";
Pattern p1 = Pattern.compile("\\d+");
Matcher m = p1.matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, Integer.parseInt(m.group()) * 2 + "");
}
m.appendTail(sb);
System.out.println( sb.toString() );
见 Java demo .
关于java - 有没有办法使用正则表达式将字符串中的每个数字相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62552469/