0

我正在使用的 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());

后来我发现这行不通,因为如果表达式是 say 45+4,它就会变成0x0x45+0x4。如何防止它重复替换重复的数字?

4

2 回答 2

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
于 2013-08-13T13:42:45.800 回答
0

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

于 2013-08-13T13:41:01.213 回答