【问题标题】:Get String from command line → split string → if/else if statement returning else statement for no reason [duplicate]从命令行获取字符串→拆分字符串→if / else if语句无缘无故返回else语句[重复]
【发布时间】:2013-07-09 15:55:33
【问题描述】:

(对不起,这个奇怪的标题,但我无法弄清楚究竟是什么问题)

下面的代码应该首先从命令行获取一个字符串(有效),然后输入被拆分(也可以完美地工作;我通过在 if/else 之前打印两个字符串进行检查,正如您在部分中看到的那样我再次注释掉)然后它应该检查分割字符串的第一部分是什么。例如,如果它等于“tweet”,它应该使用 Tweet 方法处理。

但不知何故,它并没有做到这一点。它总是执行 else 语句...

Scanner sc = new Scanner(System.in);
System.out.print("> ");
String input = sc.nextLine();

String[] splitString = input.split(" ");
if(splitString.length != 2){ throw new IllegalArgumentException(); }
String command = splitString[0];
String value = splitString[1];

/*System.out.print(command);
System.out.print(value);*/
if(command == "tweet") { Tweet(value); }
else if(command == "help") { ShowHelp(); }
else { System.out.println("Command "+command+" not found."); }

我尝试输入“tweet asdf”,但它返回了

> tweet asdf
Command tweet not found.

我做错了什么?我很困惑D:

【问题讨论】:

    标签: java string if-statement


    【解决方案1】:

    使用 .equals 方法而不是 ==。

    == 比较引用。 .equals 会比较两个字符串的实际内容。

    在比较字符串时,您几乎总是希望使用 .equals 而不是 ==,因为您通常希望比较内容,而不是参考。

    【讨论】:

    • 有效!谢谢你!! :D
    • 没问题。如果这有帮助,请接受答案。
    【解决方案2】:

    您正在使用== 比较两个对象。这比较了他们的参考。请改用if(command.equals("tweet")) 按值进行比较。

    由于字符串实习取决于 JVM 和实现(官方类路径、GNU 类路径等),您的方法可能会正常运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2011-06-08
      • 2016-05-15
      • 1970-01-01
      相关资源
      最近更新 更多