首页 新闻 会员 周边 捐助

java正则表达式编译时(compile方法)产生异常

0
悬赏园豆:10 [已解决问题] 解决于 2016-08-04 13:01

上机考试遇见了一个表达式计算的题。

我想首先把表达式中的数字(字符串形式)提取出来转换成数字,于是就用了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

结果是正确的,但是如果将正则表达式改为"[+-*/]"就会产生异常,我试了一下,只有*放在-后面时才会产生异常,其他的情况都不会产生异常(如"[*+-/]"),请问这是为什么?

小弟水平有限,请多多指教。。。

青儿哥哥的主页 青儿哥哥 | 初学一级 | 园豆:190
提问于:2016-08-04 11:18
< >
分享
最佳答案
0

你这正则里面4个,3个是正则里面有用的字符需要转义,最好需要转义一下。

[*+-/] 比如这个,正则解析起来不确定性就多了,对于正则引擎来说,可能是这样描述的: [星号 加号~斜线之间的所有字符]

[+-*/] 这个地方有歧意了, -* 是表示 任意多个- 呢?还是表示 +到*之间的字符呢?

最好用这些字符的时候转义一下,加个\\就好了,

话说,你这split数字的, 直接"11111+22-4*62/3".split("\\D")不就可以了?

收获园豆:10
之奇一昂 | 小虾三级 |园豆:1421 | 2016-08-04 12:24

受教了。。.多谢解释。。园豆给你了

青儿哥哥 | 园豆:190 (初学一级) | 2016-08-04 13:00
其他回答(1)
0
     //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()函数不好吗?呵呵

craneyuan | 园豆:187 (初学一级) | 2016-08-10 14:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册