java - 有没有办法使用正则表达式将字符串中的每个数字相乘?

标签 java regex

我需要将每个数字字符串增加两次。例如“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/

相关文章:

java - 使用迭代器时有没有办法跳过第一个节点?

javascript - Jquery 验证引擎正则表达式

regex - Nodejs : JSONStream parse method regex

c++ - 在 QRegularExpression 中,绕过 "lookbehind assertion is not fixed length"限制的最佳方法是什么?

Java 直播命令行

java - 将数据传递给 Android 中的自定义 View

java - Spring Integration 轮询器有时会运行一次然后停止

java - 在单个事务下包装整个 DBUnit/JUnit 测试

java - 用一种方法使用 3 种可能的正则表达式扫描文件

python - 从文本Python中删除括号中的时间戳