我有一个发送和接收信息的 UDP 服务器/客户端。 Client
将发送示例 "TEST"
到服务器,服务器将收到"TEST"
在byte[]
数组表示并将其转换为 String
使用 String(byte[])
构造函数。然后我需要比较新的 String
使用 equalsIgnoreCase
接收另一个字符串方法。但它不起作用...
这是我的代码示例:
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
//Client sent "TEST"
String sentence = new String(receivePacket.getData(), "UTF-8");
System.out.println("RECEIVED: " + sentence);
System.out.println(sentence.equalsIgnoreCase("TEST")); //This gives me FALSE
有什么想法吗?
最佳答案
最可能的解释是 sentence
中的字符串不是 "TEST"
而是看起来像 "TEST"
当你显示它的时候。最可能的字符串是:
“测试”
或“测试”
“测试\n”
但也有可能你有一个 homoglyph在客户端字符串或您的服务器代码中。
Alright so I just found out using sentence.length() that sentence is 1024 characters long...if I take a substring of it, specifically sentence.substring(0,4).
啊。所以问题是(可能)您忽略了接收到的数据包的大小,并将整个缓冲区数组包含在字符串中。
提取字符串最正确的方法是:
new String(receivePacket.getData(),
receivePacket.getOffset(),
receivePacket.getLength(), "UTF-8");
...尽管我认为根据前面的陈述,偏移量将为零。
(但也有可能客户端正在发送 NUL 字节......在这种情况下,您还需要在客户端进行更改。)
关于java - 从字节数组转换为字符串并与另一个字符串进行比较(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26669419/