上机考试遇见了一个表达式计算的题。
我想首先把表达式中的数字(字符串形式)提取出来转换成数字,于是就用了java的正则表达式将算数表达式进行拆分。
代码如下:
private static void test6() { // 提取张三 去除数字 String r_name3 = "11111+22-4*62/3"; try { Pattern pattern = Pattern.compile("[+*-/]"); String[] result=pattern.split(r_name3); for(int i=0;i<result.length;i++) { System.out.println(result[i]); } } catch(PatternSyntaxException e) { System.out.println("产生异常了!"); } }
输出结果为:
11111
22
4
62
3
结果是正确的,但是如果将正则表达式改为"[+-*/]"就会产生异常,我试了一下,只有*放在-后面时才会产生异常,其他的情况都不会产生异常(如"[*+-/]"),请问这是为什么?
小弟水平有限,请多多指教。。。
你这正则里面4个,3个是正则里面有用的字符需要转义,最好需要转义一下。
[*+-/] 比如这个,正则解析起来不确定性就多了,对于正则引擎来说,可能是这样描述的: [星号 加号~斜线之间的所有字符]
[+-*/] 这个地方有歧意了, -* 是表示 任意多个- 呢?还是表示 +到*之间的字符呢?
最好用这些字符的时候转义一下,加个\\就好了,
话说,你这split数字的, 直接"11111+22-4*62/3".split("\\D")不就可以了?
受教了。。.多谢解释。。园豆给你了
//Java脚本引擎 String r_name3 = "11111+22-4*62/3"; ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); Object resultObject = engine.eval(r_name3); System.out.println(resultObject);
直接采用js中的eval()函数不好吗?呵呵