字符串比较 - JAVA

时间:2012-03-16 03:19:38

标签: java string

好的,我知道这个问题有数百万个答案“我如何比较字符串”但我已经确定我已经尽可能多地研究解决我的问题但我找不到答案...

我正在使用DatagramSockets在udp上运行java中的网络聊天服务器和客户端(即使通过tcp流更有意义)。当用户键入exit时,我希望有一种方法可以退出任何一方的聊天程序。为了获得用户输入,我使用了Scanner,我在类getMessage中的getter.getMessage方法中声明了该getter.getMessage(); String pTest = getter.smessage; if(pTest.equals("exit")) { System.out.println("System going offline"); getter.isOn = false; } 。这是我现在正在处理的代码:

if(getter.message.toLowerCase().Equals("exit") {
  //blah
}

每次围绕我的while循环都会被忽略,即使用户输入退出也是如此。我也尝试过:

String pTest

我最初尝试过不将getter.message放入{{1}},但它只是不想工作。我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

试试这个:

if ("exit".equalsIgnoreCase(getter.message.trim())) {
    . . .
}

修改

您在评论中提到,当您预期"exit"时,您将收到11个字符(调用trim()后10个字符)。这表明编码与数据不匹配。也许服务器在开头发送带有字节顺序标记的UTF-16数据。 (这可以解释字节数。)如果您正在使用platform-default编码(通常是ISO-8859-1或UTF-8)读取它,那么您将每个字节转换为一个字符,它将永远不会匹配{{1 }}。您需要使编码的两边都匹配。

知道用于发送数据的编码后,使用采用字符编码的构造函数创建"exit"。例如,它可能是:

Scanner

答案 1 :(得分:0)

可能是白色/空白的问题。尝试以下代码,

if (getter.message.toLowerCase().trim().Equals("exit") )
{
   //blah
}

答案 2 :(得分:0)

我假设getter.message正在返回一些东西。您是否尝试检查从getter.message返回的String的“长度”?

我从未尝试过这样的事情,但在AJAX中遇到了类似的问题。从服务器返回的String的长度大于我正在比较的String。在比较之前我不得不删除不需要的空格。