Boolescher Ausdruck (String) in boolean konvertieren

freckle69

Grünschnabel
Hallo zusammen,

ich beschäftige mich erst seit kurzem mit Java (bitte Nachsicht :)) und ich habe ein Problem mit der Konvertierung von String zu boolean.
Ich bekomme als Eingabe einen String, der einen booleschen Ausdruck enthält. Diesen möchte ich nun in boolean umwandeln.

Bsp.
Code:
String test = "!false";
boolean testresult = Boolean.parseBoolean(test);
System.out.println(testresult);

Der String kann sich allerdings ändern, also da kann auch sowas wie "true && !false" drin stehen.
Statt parseBoolean(test) habe ich auch schon valueOf(test) oder valueOf(test).booleanValue() probiert. Es wird allerdings immer "false" geliefert, außer der String ist "true" - wie es auch in der API steht
The Boolean returned represents the value true if the string argument is not null and is equal, ignoring case, to the string "true".

Scheinbar geht es so leider nicht. Daher wollte ich hier mal fragen, ob jemand weiß, wie man dieses Problem lösen kann.

Vielen Dank!
Tina
 
Hallo,

mit Boolean.parseBoolean kannst du nur direkt die den String "true" auswertern lassen dann ist das ergebnis true ansonsten false.

Wenn du richtig Ausdrücke evaluieren willst musst du dir schon anders behelfen beispielsweise so in Java 6:
Java:
/**
 * 
 */
package de.tutorials;

import javax.script.ScriptEngineManager;

/**
 * @author Thomas.Darimont
 * 
 */
public class BooleanExpressionEvaluator {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        System.out.println(new ScriptEngineManager().getEngineByName(
                "javascript").eval("true && true && !false"));
    }

}

Gruß Tom
 
Hallo,

Super, genau sowas hab ich gesucht!
Ich habs noch etwas abgeändert, weil ich wirklich einen boolean-Wert brauche (fließt später in eine if-Entscheidung ein, die Ausgabe war nur zu Testzwecken).

Code:
String test = "!false";

try
{
  boolean result = Boolean.parseBoolean(new ScriptEngineManager().getEngineByName("javascript").eval(test).toString());
  System.out.println(result);
}
catch(Exception e)
{
  e.printStackTrace();
}

Danke für die schnelle Hilfe!
Tina
 
Zurück