Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换字符串中的数字_Java_Regex_String_Replace_Hex - Fatal编程技术网

Java 替换字符串中的数字

Java 替换字符串中的数字,java,regex,string,replace,hex,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())

我使用的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
,它就会变成
0x45+0x4
。如何防止它重复替换重复的数字?

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

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

一个简单的
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
一个简单的
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

另一种方法:可以将
String#replaceAll()
与regex一起使用,regex可以包括
\b
[boundary]和操作符。这将是我能想到的最简单的解决方案。另一种方法:您可以将
String#replaceAll()
与正则表达式一起使用,正则表达式可以包括
\b
[boundary]和运算符。这是我能想到的最简单的解决方案。也许
[\\da-fA-F]+
处理小写/大写:)你为什么用1美元?@ArjunU:这是一个关于捕获组编号1匹配的参考。也许
[\\da-fA-F]+
处理小写/大写:)你为什么用$1?@ArjunU:这是一个关于捕获组编号1匹配的参考。