2016-11-08 13 views
-2

Welcher ist der gute Weg, um eine mathematische Variablen Ausdruck zu validieren. Ob wir Stack oder mit Regex-Ausdruck verwenden können.validieren mathematische Variablen Ausdruck in Java

Ich habe mit http://www.sanfoundry.com/java-program-implement-evaluate-expression-using-stacks/

Hinweis gegangen: Der Ausdruck nicht Klammer enthält. Zum Beispiel:

Gültig:

  • x+3-y/2
  • x+y
  • 2+4+e

Ungültig:

  • x++4+8
  • e-3r
  • e+r34-

Wie die obige Ausdrücke zu validieren? Ich brauche die mathematische Ausdruck Eingabe durch den Benutzer in java

+0

Eine Möglichkeit, einen Stapel zu verwenden wäre, als mit Reverse Polish Notation erfolgt. Übrigens ist 'x ++ 4 + 8' nicht ungültig, wenn Sie' ++ 'als Inkrementoperator akzeptieren. –

+0

Wie hängt das mit Java zusammen? –

+0

Ich muss die mathematische Ausdruckeingabe validieren, die vom Benutzer in Java zur Verfügung gestellt wird – bharathi

Antwort

0

Wenn keine Klammern angegeben zu validieren (d Verschachtelung Ausdrücke) sind erlaubt, könnte die Validierung durch einfache regex erfolgen:

final Pattern pattern = Pattern.compile("([0-9]+|[a-z]+)([-+*/]([0-9]+|[a-zAZ]+))*"); 

for (String s : Arrays.asList("123", "x+3-y/2", "x+y", "2+4+e", "x++4+8", "e-3r", "e+r34-", "---x+3-y/2")) { 
    System.out.format("%5s %s\n", pattern.matcher(s).matches(), s); 
} 

Der Ausgang ist

true 123 
true x+3-y/2 
true x+y 
true 2+4+e 
false x++4+8 
false e-3r 
false e+r34- 
false ---x+3-y/2 
+0

Danke Kgeorgiy. Diese Antwort ist sehr hilfreich für mich, um die Analyse zu starten. Kann ich wissen, welches besser man Stack oder mit Regex-Ausdruck verwenden kann. Eine Idee? – bharathi

+0

fehlgeschlagen bei '--- x + 3-y/2' – Aroniaina

+0

Stack-basierte Lösung erforderlich, wenn Verschachtelung Ausdrücke zulässig sind, aber wie dies nicht der Fall ist, ist die Regex-Lösung viel einfacher. – kgeorgiy

Verwandte Themen