2014-12-10 1 views
0

Вот пример выражения string, которое я создаю, которое затем я хочу использовать в состоянии оператора if.Динамическое If Условие из выражения String

public static String dynamicIf(String a, String b, String c){ 
    String expression = ""; 
    String[] list = {"one", "two", ""}; 

    if(!a.equals("")) 
     expression += "a.equals(list[0])"; 

    if(!b.equals("")) 
    { 
     if(!expression.equals("")) 
      expression += " && b.equals(list[1])"; 
     else 
      expression += "b.equals(list[1])"; 
    } 

    if(!c.equals("")) 
    { 
     if(!expression.equals("")) 
      expression += " && c.equals(list[2])"; 
     else 
      expression += "c.equals(list[2])"; 
    } 

    //String[] splitExpression = expression.split(" && "); 

    return expression; 
} 

Таким образом, функция выше создает строку, которую я тогда хотел бы использовать в качестве условия if заявления. В результате этого метода работает с этими параметрами:

dynamicIf("one","two",""); 

является

a.equals(list[0]) && b.equals(list[1]) 

Как я могу получить это выражение в виде строки для запуска в состоянии с if? Надеюсь, вы понимаете. Спасибо.

+2

Вам нужно будет написать переводчика. Чтобы интерпретировать это. Java не имеет 'eval'. –

+0

Что именно делает 'eval'? Я не уверен в этой идее, поэтому не уверен, что писать. – Safinn

+1

В принципе, не пытайтесь делать подобные вещи, если только вы не пишете программу, которая на самом деле генерирует исходный код Java. Вы сделаете лучше, если вы создадите какую-то структуру данных, которая содержит, например, индексы списков и строки, в которые вы хотите сравнить элементы списка. – ajb

ответ

1

Вы не можете сделать это на Java, поскольку это не интерпретируемый язык. Вместо этого переработайте свой код. Что-то вроде этого может привести вас на правильный путь:

public static boolean dynamicIf(String a, String b, String c) { 

    final String[] list = {"one", "two", ""}; 

    boolean value = true; 

    if (!a.isEmpty()) { 
     value &= a.equals(list[0]); 
    } 

    if(!b.isEmpty()) { 
     value &= b.equals(list[1]); 
    } 

    if (!c.isEmpty()) { 
     value &= c.equals(list[2]); 
    } 

    return value; 
} 

Это должно дать вам те же результаты, что и вы ищете. Пример:

if (dynamicIf("one", "two", ""))  // true 
if (dynamicIf("", "two", ""))   // true 
if (dynamicIf("", "", ""))   // true 
if (dynamicIf("one", "two", "three")) // false 

Edit: Это может или не может быть то, что вы ищете. Вы оставили комментарий, который добавил больше контекста к проблеме и заставляет меня думать иначе, но ваш желаемый конечный результат все еще не ясен.

+0

Протестировано и, кажется, работает хорошо. Завтра сделаем еще несколько тестов, а затем выберем это как ответ. – Safinn

Смежные вопросы