2014-02-16 141 views
1

說一個字符串包含表達式1 < 3 ...如何在if語句中評估該表達式?在if語句中評估字符串中的表達式

import java.io.*; 

public class EvaluateExpression 
{ 
    public static void main(String[]args)throws IOException 
    { 
    InputStreamReader isr = new InputStreamReader(System.in); 
    BufferedReader in = new BufferedReader(isr); 

     String expression; 

     System.out.print("Enter the expression to evaluate: "); 
     expression = in.readLine(); 

     if (expression){ 
     System.out.print("The expression " + expression + " is true."); 
     }else{ 
     System.out.print("The expression " + expression + " is not true."); 
     }   
    } 
} 

需要一個布爾值,但找到一個字符串。有沒有一種方法來評估字符串,所以它返回一個布爾值? if (1<3) {...}工作但if (expression) {...}其中字符串變量表達式爲1 < 3不起作用。將其轉換爲布爾值也不起作用。

謝謝!

+3

相似問題:http://stackoverflow.com/questions/2605032/using-eval-in-java – Allan

回答

0

您可以分割使用> <字符串,> =,< =,= =,=爲定界符!從分割函數中檢查返回數組中的2個字符串,並將它們轉換爲int。

然後使用類似這樣的功能

if (youroperator.equals("<")) 
    return first_number < second_number 
elseif (youroperator.equals(">")) 
    return first_number>second_number 
... 

您的運營商可以從string.contains()函數

+0

管理得到正確的結果使用您的建議......非常感謝! –

+0

很高興我能幫到隊友。 –

0

您可以使用ScriptEngine未來與JDK1.6

例如:

ScriptEngineManager sem = new ScriptEngineManager(); 
ScriptEngine se = sem.getEngineByName("JavaScript"); 

InputStreamReader isr = new InputStreamReader(System.in); 
BufferedReader in = new BufferedReader(isr); 
String expression; 

    System.out.print("Enter the expression to evaluate: "); 
    expression = in.readLine(); 
    String result = se.eval(expression).toString(); 
    if (result.equals("true")) { 
     System.out.print("The expression " + expression + " is true."); 
    } else { 
     System.out.print("The expression " + expression + " is not true."); 
    } 
0

如果你願意,你可以使用內置的腳本引擎的通用解決方案來獲得JVM。

import javax.script.ScriptEngineManager; 
import javax.script.ScriptEngine; 
... 
... 
String expression = "1<3"; 
ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptEngine jsEngine = manager.getEngineByName("JavaScript"); //BE CAREFUL about the engine name. 
Object result = jsEngine.eval(expression); //Returns a java.lang.Boolean for the expression "1<3" 

注:雖然「的JavaScript引擎」的名字在我的環境中工作,在您的環境中可能無法使用,或者可以通過如「JS」或「JavaScript的」其他名字被調用。在某些環境中,其他引擎(如「Groovy」引擎)可能可用。使用您的環境中可用的任何引擎。

0

嘗試...

if(expression.equals("1<3")) 
{} 
else 
{} 

「如果」需要布爾作爲參數,則不能在it.So有傳遞一個字符串equals方法java.lang.String中它檢查兩個字符串是否相等或不是,其返回類型是布爾值(true或false)。