替换字符串中的数字

时间:2013-08-13 13:33:42

标签: java regex string replace hex

我使用的java数学表达式求值程序库要求以十六进制数字为前缀 0x 。表达式以字符串形式传递。

String expr = "0xAE6+0x22";

但是在输入输入时,我想输入不带 0x 的数字,然后输入前缀。所以我想出了一个想法,用字符串中的正则表达式提取数字,前缀 0x 并替换它。

String expr = "AE6+22";
Matcher m = Pattern.compile("[0123456789ABCDEF]{1,}").matcher(expr);
        while (m.find()) 
            expr = expr.replace(m.group(), "0x" + m.group());

我后来发现这不起作用,因为如果表达式是45+4,则变为0x0x45+0x4。如何防止它反复更换重复的数字?

2 个答案:

答案 0 :(得分:3)

一个简单的replaceAll()可以完成这项工作:

String expr = "AE6+22";
String regex = "([\\dA-F]+)"; // use "([\\da-fA-F]+)" to also support lowercase
String replaced = expr.replaceAll(regex, "0x$1");
System.out.println(replaced); // prints 0xAE6+0x22

答案 1 :(得分:0)

我的想法是使用执行的操作,如+ - / *等作为分隔符,在表达式的开头附加0x,然后在没有括号的每个分隔符后追加0x,也许是对复杂性的一点澄清可能有助于某人更好地回答你的问题,但我试过,祝你好运!