2

好的......我一直在寻找一段时间,我似乎无法找到一个简单的解决方案。

我正在尝试获取调用时传递的字符串并将其评估为 IF 条件中的布尔表达式

$ java MyProgram x==y

...
int x;
int y;
...
String stringToEval = args[0];
...
if(stringToEval){
    printSomething();
} else printNothing();
...

提前致谢

4

4 回答 4

2

您需要使用某种形式的表达式解析器来解析 in 的值args[0]并创建一个可以应用于xand的表达式y。您可以使用JaninoJEXLJeval 之类的东西来执行此操作。如果输入定义明确,您也可以自己编写一个小型解析器。

于 2013-10-31T11:22:10.690 回答
1

您所做的有点复杂,您需要评估表达式并从操作中提取 2 个参数

String []arguments = extractFromArgs(args[0])

你在那里得到xy重视arguments

然后:

if (arguments [0].equals(arguments[1]))

如果 x 和 y 是整数:

int intX = new Integer(arguments[0]);
int intY = new Integer(arguments[0]);
if (intX == intY)

ETC...

PS:为什么要使用 Integer、Double ..?因为在字符串评估中“2”不等于“2.0”,而在整数和双精度评估中,它们是相等的

于 2013-10-31T11:17:00.120 回答
0

您将输入作为命令行参数的是字符串类型,并且您想将其用作布尔值,因此您需要将字符串转换为布尔值。

为此,您必须选择使用valueOf(String s)parseBoolean(String s)

所以你的代码必须是这样的,

S...
int x;
int y;
...
String stringToEval = args[0];
boolean b = Boolean.valueOf(stringToEval);

boolean b1 = Boolean.parseBoolean(stringToEval); // this also works 
...
if(b){
    printSomething();
} else printNothing();
...
于 2013-10-31T11:37:45.747 回答
-2

那么据我了解,字符串 args[0] 是布尔值吗?那么为什么不将它转换为布尔值呢?

boolean boolToEval = Boolean.parseBoolean(args[0]);
//OR
boolean boolToEval = Boolean.valueOf(args[0]);    

//THEN
(boolToEval ? printSomething() : printSomethingElse());
于 2013-10-31T11:14:47.393 回答