【问题标题】:JAVA .equalsIgnoreCase not workingJAVA .equalsIgnoreCase 不起作用
【发布时间】:2012-07-21 06:27:40
【问题描述】:

在我的服务器类的主要方法中,我有一系列 if 语句用于聊天程序的保留关键字,我正在尝试使用变量的值和 .equalsIgnoreCase 方法来遍历这些语句。问题是,即使我的变量拥有某个值,但在执行程序时,即使变量与 if 条件之一完全匹配,代码也总是会进入 else 子句。代码编译得很好,但我就是不知道为什么会这样。我在开始 if 语句之前打印了变量的值,以验证它是否保持正确的值。我的代码片段如下所示:

System.out.println("Keyword is : " + keyword);
if (keyword.equalsIgnoreCase("who")) 
{  
  System.out.println("calling who function");
  whoFunction(address, socket, port);
} 
else if (keyword.equalsIgnoreCase("whoami")) 
{ 
  whoami(address, socket, port, clientAddress);
} 
else if (keyword.equalsIgnoreCase("all")) 
{   
  all(message);
} 
else if (keyword.equalsIgnoreCase("Bye")) 
{
  bye(address, socket, port, clientAddress);
} 
else 
{     
  newUser(keyword, address, searchListLength, clientAddress, port);
}

无论关键字的值是什么,它总是求助于选择最后的 else 语句。如您所见,这将导致总是调用我的newUser 类。我在这里错过了什么吗?可能正盯着我看:/

【问题讨论】:

  • 您的 keyword 字符串是否可能包含尾随 null 或其他不可打印的字符,导致 equalsIgnoreCase 无法检测到匹配项?
  • 在这种情况下总是打印值或使用调试器

标签: java if-statement conditional-statements


【解决方案1】:

您确定字符串 keyword 不包含任何尾随换行符/空格或其他不可打印的字符吗?

【讨论】:

    【解决方案2】:

    您的输入中可能有前导/尾随空格,这会导致不匹配。

    尝试在顶部添加此语句:

    keyword = keyword.trim();
    

    【讨论】:

      【解决方案3】:

      另见整理者

      Collat​​or 类执行区域敏感的字符串比较。你 使用这个类来构建自然的搜索和排序例程 语言文本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        • 2012-08-13
        • 2014-11-23
        • 2017-08-26
        • 2016-08-28
        相关资源
        最近更新 更多