【问题标题】:Evaluate command line argument as boolean expression(Java) 将字符串评估为布尔值
【发布时间】:2013-11-11 08:43:48
【问题描述】:

好的...我已经搜索了一段时间,但似乎找不到简单的解决方案。

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

$ java MyProgram x==y

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

提前致谢

【问题讨论】:

  • 似乎需要更多细节:他不是要求将 args[0]truefalse 转换为布尔值,而是要求某种评估 x==y 或其他表达式的方法并将其应用于应用程序中的xy
  • @ChrisMantle 检查我的其他答案,我处理了你所说的

标签: java string if-statement boolean evaluate


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

您会在arguments 中获得xy

然后:

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

如果 x 和 y 是整数:

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

等等……

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

【讨论】:

    【解决方案3】:

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

    为此,您必须选择使用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();
    ...
    

    【讨论】:

    • 同样,args[0] 不是 truefalse 的值,可以简单地解析为 Boolean。这是一个需要评估的表达式。
    【解决方案4】:

    所以据我了解,字符串 args[0] 是一个布尔值?那么为什么不将其转换为布尔值呢?

    boolean boolToEval = Boolean.parseBoolean(args[0]);
    //OR
    boolean boolToEval = Boolean.valueOf(args[0]);    
    
    //THEN
    (boolToEval ? printSomething() : printSomethingElse());
    

    【讨论】:

    • 你没看到! :P
    • 他没有转换...他在他的 arg[0] 中使用正则表达式。请在回答之前阅读问题。
    • @AdelBoutros 他到底是在哪里说的?
    • @Voidpaw 他没有传递正则表达式,他传递了一个表达式,在问题的这一行中:$ java MyProgram x==y。他想评估x==y 并将表达式应用到一些变量xy
    • @ChrisMantle 那么谁提到了正则表达式?据我所知,那是 Adel Boutros?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2016-04-17
    • 2011-07-31
    • 2012-11-22
    相关资源
    最近更新 更多