好的,我知道这个问题有数百万个答案“我如何比较字符串”但我已经确定我已经尽可能多地研究解决我的问题但我找不到答案...
我正在使用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}},但它只是不想工作。我在这里做错了什么?
答案 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。在比较之前我不得不删除不需要的空格。