IAM AM将方程式字符串分为字符串数组:
String[] equation_array = (equation.split("(?<=[-+×÷)(])|(?=[-+×÷)(])"));
N NOW对于测试字符串:
test = "4+(2×5)"
恢复很好:
test_array = {"4", "+", "(", "2",...}
但用于测试字符串:
test2 = "(2×5)+5"
我有字符串数组:
test2_array = {"", "(", "×",...}.
所以,问题是为什么在分裂后在数组中添加一个空字符串?
:
(
是什么意思是避免在线开始时分裂。
您可以添加条件,如果以前是字符串的开始之前,请不要拆分。
negative lookahead based regex
向后看如何确保我们不在字符串的开头,并期待确保我们不在最后?
String[] equation_array = "(2×5)+5".split("(?!^)((?<=[-+×÷)(])|(?=[-+×÷)(]))");
//=> ["(", "2", "×", "5", ")", "+", "5"]
here
(?!^)
"(?<=[-+×÷)(])|(?<!^)(?=[-+×÷)(])"
^^^^^^
是字符串指示器的启动和末端,
"(?<=[-+×÷)(])(?!$)|(?<!^)(?=[-+×÷)(])"
和
^
是lookahead和lookbehind.
问题是为什么在分裂后在数组中添加一个空字符串?
由于输入
$
the the the string的正则划分匹配的正则是正面的,因为前面的正面外观(?!...)
(?<!...)
。在
之前就在这里匹配,导致一个空字符串:(
(2×5)+5
我的建议是不使用正则表达式来解析数学表达式,而是更合适的算法。