2017-09-05 73 views
-4

我是新来的正则表达式。我正在测试迭代正则表达式。它第一次工作,但第二次模式不会再次初始化。为什么这不是在正则表达式中工作?

这里是我的代码:

public static void main(String a[]) 
    { 
     String s="1+2+4*5*tan(tan(30))-5.8+tan(30)"; 
     Pattern p; 
     Matcher m; 
     while(s.contains("tan(")) 
     { 
      double[] x=new double [5]; 
      p=Pattern.compile("tan\\([0-9]+\\)"); 
      m=p.matcher(s); 
      int i=0; 

      while(m.find()) 
      { 

       System.out.println(m.group()); 
       x[i]=Math.tan(Math.toRadians(Double.parseDouble(m.group().replace("tan(","").replace(")","")))); 
       i++; 
      } 


      for(int z=0;z<i;z++) 
      { 
       s=s.replaceFirst("tan\\([0-9]+\\)",""+x[z]); 


      } 
     } 
     System.out.println(s); 

    } 
+1

你是什么意思由“* ...模式不再初始化*”?你期望什么样的行为,你观察到了什么? – Pshemo

+0

循环第二次运行时p = Pattern.compile(“tan \\([0-9] + \\)”);不工作 – Abhishek

+0

哪个循环?有3.“不工作”的定义是什么? –

回答

0

检查你的正则表达式。

"tan\\([0-9]+\\)" 

这不会接受十进制数字。因此前两个tan(30)被解析,但是tan(十进制数)没有通过正则表达式,并且它继续循环。

相关问题