为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

繁华开满天机 2018-11-13 18:13:17

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

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

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

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


查看完整描述

2 回答

?
慕侠2389804

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

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

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

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

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


查看完整回答
反对 回复 2018-11-17
?
当年话下
 //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()函数不好吗


查看完整回答
反对 回复 2018-11-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信