使用字符串输入作为布尔值
Using string input as boolean
String input = sc.nextLine();
System.out.println(Boolean.parseBoolean(input));
所以我的输入看起来像 1 > 2
或 false || true
,但我没有得到正确的值。
但是当我打电话时:
Boolean x = 1 < 2;
System.out.println(x);
我猜对了。所以我的问题是。 如何将字符串输入转换为 return 布尔值?
到目前为止尝试过:
Boolean.parseBoolean();
Boolean.getBoolean();
Boolean.valueOf();
感谢您的回答。
编辑
INPUT - OUTPUT
1 < 2 - false(should be true)
false || true - false(should be true)
您可以为此使用 ScriptEngine
:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
String input = "1 > 2";
System.out.println(engine.eval(input)); //prints false
Boolean.parseBoolean(String)
实现为:
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
所以它 returns true
如果输入字符串不为空且等于 true
(忽略大小写)。否则返回 false
。
您似乎期望 Boolean.parseBoolean(String)
接受表达式字符串并 计算 字符串,但事实并非如此。
当您编写 System.out.println(1<2);
时,它会起作用,因为 println()
有一个重载版本,它采用布尔值。但是当你传递一个字符串时,它只会被认为是字符串,而不是 boolean
。
另外,Boolean.parseBoolean()
总是以字符串形式的布尔值(true\false)作为参数,returns对应的布尔形式的值,否则总是return假
Boolean.parseBoolean 根据 docs 执行以下操作:
public static boolean parseBoolean(String s)
Parses the string argument as a boolean. The boolean returned
represents the value true if the string argument is not null and is
equal, ignoring case, to the string "true".
您正试图传递一个将 计算 为真或假的表达式,而不是字符串 "true" 或 "True" 或 "TRUE"。因此,这将像这样工作:
Boolean.parseBoolean("true"); // equals true
Boolean.parseBoolean("1 > 2"); // not the string "true", therefore returns false.
一般来说,动态执行包含在字符串中的代码应该非常谨慎。如果字符串是从用户传入的,那将是非常危险的。我的建议是找到更好的方法。
如果您确实需要这样做:
- 其他答案之一提到使用
ScriptEngine
。请注意,这会将字符串计算为 JavaScript,而不是 Java。对于简单的布尔表达式,这可能没问题,但您应该意识到这一点。 Java脚本的真实性规则有时令人困惑,它们不会在 Java 中进行相同的评估。
例如,在 ScriptEngine 中尝试 运行 这个:
1 > '0' // true in JavaScript, but probably unexpected in your code!
- 如果你想在 Java 中正确地完成这一切,你可以使用 Java Compiler API. Unfortunately, it's not as simple as simply feeding expressions as strings to the ScriptEngine. This post 可能有用,但是,对于 Java 代码的内存编译。
String input = sc.nextLine();
System.out.println(Boolean.parseBoolean(input));
所以我的输入看起来像 1 > 2
或 false || true
,但我没有得到正确的值。
但是当我打电话时:
Boolean x = 1 < 2;
System.out.println(x);
我猜对了。所以我的问题是。 如何将字符串输入转换为 return 布尔值?
到目前为止尝试过:
Boolean.parseBoolean();
Boolean.getBoolean();
Boolean.valueOf();
感谢您的回答。
编辑
INPUT - OUTPUT
1 < 2 - false(should be true)
false || true - false(should be true)
您可以为此使用 ScriptEngine
:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
String input = "1 > 2";
System.out.println(engine.eval(input)); //prints false
Boolean.parseBoolean(String)
实现为:
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
所以它 returns true
如果输入字符串不为空且等于 true
(忽略大小写)。否则返回 false
。
您似乎期望 Boolean.parseBoolean(String)
接受表达式字符串并 计算 字符串,但事实并非如此。
当您编写 System.out.println(1<2);
时,它会起作用,因为 println()
有一个重载版本,它采用布尔值。但是当你传递一个字符串时,它只会被认为是字符串,而不是 boolean
。
另外,Boolean.parseBoolean()
总是以字符串形式的布尔值(true\false)作为参数,returns对应的布尔形式的值,否则总是return假
Boolean.parseBoolean 根据 docs 执行以下操作:
public static boolean parseBoolean(String s)
Parses the string argument as a boolean. The boolean returned represents the value true if the string argument is not null and is equal, ignoring case, to the string "true".
您正试图传递一个将 计算 为真或假的表达式,而不是字符串 "true" 或 "True" 或 "TRUE"。因此,这将像这样工作:
Boolean.parseBoolean("true"); // equals true
Boolean.parseBoolean("1 > 2"); // not the string "true", therefore returns false.
一般来说,动态执行包含在字符串中的代码应该非常谨慎。如果字符串是从用户传入的,那将是非常危险的。我的建议是找到更好的方法。
如果您确实需要这样做:
- 其他答案之一提到使用
ScriptEngine
。请注意,这会将字符串计算为 JavaScript,而不是 Java。对于简单的布尔表达式,这可能没问题,但您应该意识到这一点。 Java脚本的真实性规则有时令人困惑,它们不会在 Java 中进行相同的评估。
例如,在 ScriptEngine 中尝试 运行 这个:
1 > '0' // true in JavaScript, but probably unexpected in your code!
- 如果你想在 Java 中正确地完成这一切,你可以使用 Java Compiler API. Unfortunately, it's not as simple as simply feeding expressions as strings to the ScriptEngine. This post 可能有用,但是,对于 Java 代码的内存编译。