2017-01-13 5 views
0

Ich schreibe eine Regex für einen Android-Rechner. Die "+/- *" sind für nicht-dezimale Werte in Ordnung, aber das Problem liegt in dem ".". Wie überprüfe ich auf das "." ?Regex für Android-Rechner

Hier ist meine regex:

"(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)" 

Das ist meine Methode für die Berechnung ist:

private double calc(String resultString) { 
     String[] result = resultString.split("(?<=[^\\\\d.])(?=\\\\d)|(?<=\\\\d)(?=[^\\\\d.])"); 
     String op = null; 
     double res = 0; 

     for (String s : result) { 
      if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) { 
       op = s; 
      } 
      else if(s.equals(".")){ 




      } 




      else { 
       if (op == null) { 
        res = Double.parseDouble(s); 
       } else { 
        if (op.equals("+")) { 
         res = res + Double.parseDouble(s); 
        } else if (op.equals("-")) { 
         res = res - Double.parseDouble(s); 
        } else if (op.equals("*")) { 
         res *= Double.parseDouble(s); 
        } else if (op.equals("/")) { 
         res /= Double.parseDouble(s); 
        } 


       } 
      } 
     } 

     return res; 


    } 

Antwort

0

die . aus der \D Stenografie ausschließen mit einem negierten Zeichenklasse [^\d.], die jeden char übereinstimmen, sondern ein Ziffer und ein Literal . (beachten Sie die . muss nicht in der Zeichenklasse, die als literaler Punkt geparst werden muss):

"(?<=[^\\d.])(?=\\d)|(?<=\\d)(?=[^\\d.])" 

Siehe regex demo

Und ein online demo (in Java):

String resultString = "1-1+0.4/2+0.5*4"; 
String[] result = resultString.split("(?<=[^\\d.])(?=\\d)|(?<=\\d)(?=[^\\d.])"); 
String op = null; 
double res = 0; 

for (String s : result) { 
    if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) { 
     op = s; 
    } 
    else { 
     if (op == null) { 
      res = Double.parseDouble(s); 
     } else { 
      if (op.equals("+")) { 
       res = res + Double.parseDouble(s); 
      } else if (op.equals("-")) { 
       res = res - Double.parseDouble(s); 
      } else if (op.equals("*")) { 
       res *= Double.parseDouble(s); 
      } else if (op.equals("/")) { 
       res /= Double.parseDouble(s); 
      } 
     } 
    } 
} 
System.out.println(res); // => 2.8 (= 1-1+0.4/2+0.5*4) 
+0

Dies scheitert die doppelte zu analysieren. –

+0

Bitte geben Sie Ihren Code und Beispiel Eingabe/erwartete Ausgabe. –

+0

Ich habe die obige Berechnungsmethode hinzugefügt –