我正在解析字符串,然后我需要将其转换为数字。但如果它包含除以0,例如
String str1 = "1+2+3-5/0+4+6"
String str2 = "1+2+3-4/0.000 +4+6"
我必须在这个字符串中写“除以0错误”。我的正则表达式看起来像这样,但这是错误的。
String REGEXP_DIV_BY_0 = "(.*)([/0\\.0{1,4}](^[1-9]+))(.*)";
我无法为此任务创建正则表达式,以匹配字符串(如果它包含除以0。
)答案 0 :(得分:1)
我做:
/0+(?:\.?0*)?(?!\d)
<强>解释强>
/ : a slash (escape it if necessary)
0+ : 1 or more 0
(?: : non capture group
\.?0* : an optional comma followed by 0 or more 0's
)? : end group (optional)
(?!\d) : negative lookahead, assume there're no more digit followed the 0's
答案 1 :(得分:1)
正则表达式不是评估表达式的正确方法,有太多案例,例如1/0, 1/(1-1), 1/(5+5-10), 1/(2*2-2^2)....
您可以使用ScriptEngineManager
:
String str1 = "555/0";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("js");
try {
System.out.println(engine.eval(str1));
}
catch (ScriptException e) {
e.printStackTrace();
}
如果有/0
个案,则结果为&#34; Infinity
&#34;。
答案 2 :(得分:0)
这应该可以胜任:.*\/0([^.]|$|\.(0{4,}.*|0{1,4}([^0-9]|$))).*
在这里你可以玩它:https://regex101.com/r/lwAVan/1
答案 3 :(得分:0)
这有点奇怪,但如果你真的必须这样做,那么类似下面的模式应该有用:
0\.0{1,4}\D|/0[^\d.]
由于您的要求不是很清楚,因此很难说它需要多么宽容。例如,这种模式不允许除法运算符和除数之间的空白。它还假设在数字之后总会有一些文本,只要它总是写成java字符串文字,那么这是一个安全的假设。