String als boolescher Ausdruck
Markus Bellmann
- java
Hallo Java-Profis,
vielleicht kann mir ja jemand helfen !!
Also folgendes Problem:
Ich möchte in einem Java-Servlet einen booleschen Ausdruck als String übergeben (z.B. "1==1"). Gibt es jetzt eine Möglichkeit, ohne dass ich einen Parser basteln muss, diesen String direkt als booleschen Ausdruck zu verwenden ??
Vielleicht hat ja auch jemand schon so einen Parser und kann ihn mir zur Verfügung stellen ??! :-)
DANKE im vorraus
Markus
Hi,
Hallo Java-Profis,
bin ich nicht - darf ich trotzdem reden.. ;-))
Ich möchte in einem Java-Servlet einen booleschen Ausdruck als String übergeben (z.B. "1==1").
Warum?
Gibt es jetzt eine Möglichkeit, ohne dass ich einen Parser basteln muss, diesen String direkt als booleschen Ausdruck zu verwenden ??
Ein String ist ein String und ein boolean ist ein boolean. Warum nicht einfach true/false in Abhängigkeit der Stringauswertung übergeben?
Gruß,
Martin
Hallo,
erstmal Danke für die Antwort !!
Ein String ist ein String und ein boolean ist ein boolean. Warum nicht einfach true/false in Abhängigkeit der Stringauswertung übergeben?
Also der Ausdruck "1=1" war nur ein Beispiel (ich gebe zu, ein blödes !! :-))
Also eigentlich wird so etwas übergeben:
"($platzhalter1$ == $platzhalter2$) or ($platzhalter$ == 2)"
die Platzhalter werden dann vom Servlet natürlich ersetzt !
d.h. die Ausdrücke können komplexer werden und bevor ich jetzt einen Parser baue wollte ich halt gerne wissen, ob es auch einfacher geht ??
Gruß
Markus
Hi,
zur nicht vorhanden "Eval"-Methode unter Java hat Frank ja bereits alles gesagt.
Also der Ausdruck "1=1" war nur ein Beispiel (ich gebe zu, ein blödes !! :-))
Also eigentlich wird so etwas übergeben:
Die Methode hat also mindestens 3 Parameter?
"($platzhalter1$ == $platzhalter2$) or ($platzhalter$ == 2)"
Sinnvollerweise implementierst Du die Logik so, dass Du entweder nur Strings oder Integers als Parameter durch den Client-Request übergeben bekommst. Andernfalls müsstest Du ja jedesmal erst einmal den Typ des Parameters prüfen.
Der Rest sind dann einfache Bool'sche Statements a la if(platzhalter1.equals(platzhalter2).
Ich hoffe, ich habe Dich verstanden.
Grüße
Martin
hi!
Ich möchte in einem Java-Servlet einen booleschen Ausdruck als
String übergeben (z.B. "1==1"). Gibt es jetzt eine Möglichkeit,
ohne dass ich einen Parser basteln muss, diesen String direkt als
booleschen Ausdruck zu verwenden ??
Nein, das geht in Java nicht. Dazu müsste man ja einen Ausdruck
innerhalb eines Programms selbst evaluieren können. Sowas ist zum
Beispiel in Perl oder anderen Skriptsprachen möglich. Aber nur, weil
es sich dabei um interpretierte Sprachen handelt.
Bei kompilierten Sprachen müsstest du ja dann immer einen kompletten
Compiler mitliefern, um diese Laufzeit-Evaluierung zu realisieren,
was aber praktisch nur schlecht möglich ist.
Vielleicht hat ja auch jemand schon so einen Parser und kann ihn
mir zur Verfügung stellen ??! :-)
Was heißt Parser? Der Parser überprüft ein Wort lediglich auf
Korrektheit der Syntax, nichts anderes. Da ist in diesem Fall schon
ein bisschen mehr nötig.
Allerdings stelle ich mir sowas nicht sonderlich kompliziert vor, da
du ja nur einige sehr einfache Ausdrücke verwerten willst. Evtl. gibt
es ja im Netz in Sammlungen von Java-Paketen passende Klassen- oder
Klassenhierarchien. Ich kenne keine.
bye, Frank!
Hallo,
danke für die detaillierte Antwort !!
Was heißt Parser? Der Parser überprüft ein Wort lediglich auf
Korrektheit der Syntax, nichts anderes. Da ist in diesem Fall schon
ein bisschen mehr nötig.
Die Übergabe soll ein beliebiger boolescher Ausdruck sein !! Mit dem Parser wollte ich dann überprüfen, ob es ein korrekter Ausdruck ist. Wenn ich dann beim parsen eh alles auseinander nehmen muss, kann ich dann ja die einzelnen Ausdrücke mit Java-Syntax überprüfen. Dies ist natürlich aufwendig und nur sinnvoll mit rekursiver Programmierung zu lösen und da dachte ich halt, vielleicht gibts eine komfortablere Lösung !!
Gruß
Markus