2017-09-05 1 views
-4

Ich bin neu in regulären Ausdrücken. Ich teste einen iterativen regulären Ausdruck. Zum ersten Mal funktioniert es, aber das zweite Mal Muster wird nicht erneut initialisiert.Warum funktioniert das nicht im regulären Ausdruck?

Hier ist mein Code:

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

Was meinst du mit "* ... Muster wird nicht wieder initialisiert *"? Welches Verhalten hast du erwartet und was hast du stattdessen beobachtet? – Pshemo

+0

wenn die Schleife zum zweiten Mal ausgeführt wird p = Pattern.compile ("tan \\ ([0-9] + \\)"); funktioniert nicht – Abhishek

+0

Welche Schleife? Es gibt 3. Was ist die Definition von "nicht funktioniert"? –

Antwort

0

Überprüfen Sie Ihre regex.

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

Dies akzeptiert keine Dezimalzahlen. Daher werden die ersten zwei tan (30) aufgelöst, aber dann passiert die tan (Dezimalzahlen) nicht die Regex und sie läuft in einer Schleife weiter.

Verwandte Themen