我使用的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
。如何防止它反复更换重复的数字?
答案 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,也许是对复杂性的一点澄清可能有助于某人更好地回答你的问题,但我试过,祝你好运!