2015-11-07 99 views
0
String input = sc.nextLine(); 
    System.out.println(Boolean.parseBoolean(input)); 

所以我投入的樣子1 > 2false || true,但我沒有得到正確的價值觀。使用字符串輸入布爾

但是,當我打電話:

Boolean x = 1 < 2; 
    System.out.println(x); 

我讓他們正確的。所以我的問題是。 如何將字符串輸入轉換爲返回布爾值?

到目前爲止已經試過:

Boolean.parseBoolean(); 
    Boolean.getBoolean(); 
    Boolean.valueOf(); 

謝謝您的回答。

編輯

INPUT   - OUTPUT 
1 < 2   - false(should be true) 
false || true - false(should be true) 
+0

執行代碼時你獲得了什麼值?請在此分享。 –

回答

4

您可以使用ScriptEngine此:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); 
String input = "1 > 2"; 
System.out.println(engine.eval(input)); //prints false 
+0

我其實已經在js中完成了這項工作,但是我不知道ScriptEngine有這樣的事情,謝謝! – Seven

1

Boolean.parseBoolean(String)實現爲:

public static boolean parseBoolean(String s) { 
    return ((s != null) && s.equalsIgnoreCase("true")); 
} 

所以它返回true如果輸入〜應變g不爲空並且等於true(忽略大小寫)。否則返回false

你似乎認爲Boolean.parseBoolean(String)接受一個表達式字符串,評估字符串,但事實並非如此。

1

當你編寫System.out.println(1<2);它的工作原理是因爲有一個帶有布爾值的println()的重載版本。但是當你傳遞一個字符串時,它將被視爲僅字符串,而不是boolean

此外,Boolean.parseBoolean()始終以布爾值(真\假)以字符串格式作爲參數,並相應在布爾格式值返回,否則將始終返回false

0

Boolean.parseBoolean將執行以下操作,根據該docs

公共靜態布爾parseBoolean(String s)將

將字符串參數分析爲boolean值。返回的布爾值 表示如果字符串參數不爲空,並且 等於(忽略大小寫)字符串「true」,則值爲true。

您正在嘗試將評估爲真或假的表達來傳遞,而不是字符串「true」或「真」或「TRUE」。因此,這將如下工作:

Boolean.parseBoolean("true"); // equals true 
Boolean.parseBoolean("1 > 2"); // not the string "true", therefore returns false. 

一般來說,您應該對包含在字符串中的代碼的動態執行非常謹慎。如果字符串是從用戶傳入的,這是非常危險的。我的建議是尋找更好的方法。

如果你真的需要這樣做:

  • 一個其他的答案中提到使用ScriptEngine。請注意,這將評估字符串爲JavaScript,而不是Java。對於簡單的布爾表達式來說,這可能很好,但你應該知道它。 JavaScript對真實性的規則有時令人困惑,而且它們不會在Java中評估它們。

例如,嘗試在ScriptEngine的運行以下命令:

1 > '0' // true in JavaScript, but probably unexpected in your code! 
  • 如果你想用Java做這一切正常,你可以使用Java Compiler API。不幸的是,它不像將表達式作爲字符串提供給ScriptEngine一樣簡單。但是,對於Java代碼的內存中編譯,This post可能很有用。