# Einen String als Bedingung auswerten



## kopinsky (15. Feb 2007)

Hallo zusammen.

ich habe eine Bedingung als String-Variable und möchte diese nun in einem if-Statement auswerten. Geht das mit Java? Also ungefähr folgendermaßen:


```
int a=1;
int b=2;

String bed="a+b>2";

if (bed){
  System.out.println("Die Bedingung ist erfüllt");
}
```
So geht es natürlich nicht, aber kann ich die String-Variable irgendwie in eine Bedingung wandeln, die dann ausgewertet werden kann? Geht es vielleicht mit Reflection? Oder geht sowas gar nicht?

Wäre nett, wenn mir da jemand einen kleinen Tip geben kann. Danke
Christoph


----------



## Der Müde Joe (15. Feb 2007)

hää?

was willste den machen

is doch humbuck ein int in einen String zu wandelt
und dan zu iffen

wen dan

if( (a+b) < 2)

oder so


----------



## Guest (15. Feb 2007)

na ja, das war nur ein beispiel. In diesem Zusammenhang macht es natürlich keinen Sinn. 

Sagen wir mal, ich möchte Bedingungen an zentraler Stelle ablegen und dann dynamisch auswerten lassen. Dabei möchte ich soviele Bedingungen definieren können wie ich will und alle sollen nacheinander abgearbeitet werden. ich weiss, dass an der Stelle im Code, wo die Bedingungen abgearbeitet werden sollen, eine Variable namens "content" vorhanden ist, und jetzt möchte ich eine Liste von Bedingungen füllen und da zum Beispiel reinschreiben

"content.length()>0 && content.length()<6"
"content=='fish'"
usw.

Und diese Bedinungen sollen dann nacheinander ausgewertet werden.


----------



## The_S (15. Feb 2007)

Wirst wohl nicht drum herum kommen die Bedingung zu parsen ...


----------



## Der Müde Joe (15. Feb 2007)

uiuiuiui schon wieder ==

Strings vergleich man mit equals() oder equalsIgnoreCase()

oder mit idndexOf() oder mit contains()

also

if( myString.equals("fish"))
if( myString.indexOf("fisch) > -1)
if( myString.contains("fi"))

gehe auf FAQ


----------



## The_S (15. Feb 2007)

? Hab ich das jetzt falsch verstanden oder du?


----------



## Der Müde Joe (15. Feb 2007)

oder beide?


----------



## SlaterB (15. Feb 2007)

das wird sehr aufwendig,

1.
zum einen den String zu parsen und Zeichen wie < zu verstehen sowie die Verknüpfung zwischen den einzelnen Elementen festzustellen

dies könntest du verhindern, wenn du keinen String 'an zentraler Stelle' ablegst, sondern dort gleich eine Objektstruktur:
statt 
String bedingung = "a+b>2";
also
Bedindung bedingung = createGreater(createAdd(createVariable("a"), createVariable("b")),2);

ansonsten muss der Parsen eben diese Objekte aus dem String bauen,
aufwendiger, aber dann kann man Bedinungen lesbarer formulieren 

2.
wenn du dann die abstrakte Information 'tue was mit Variable "a"' hast,
dann musst du noch auf die vorhandene Variable a zugreifen,
das geht mit Reflection (vielleicht nur für Exemplarvariablen, nicht für lokale Variablen)

besser wäre es wohl, auf feste Bezeichner zu verzichten 
sondern eher mit einer Liste von Parametern zu arbeiten


----------

