java - 从字节数组转换为字符串并与另一个字符串进行比较(java)

标签 java arrays string bytearray

我有一个发送和接收信息的 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/

相关文章:

c - 存储分隔的字符串

string - 在 Scala 中比较字符串列表

java - 如何使用spring data在elasticsearch中根据结果的最高精度对数据进行排序

java - 输出说明

java - 异常 NullPointer,建议?

c++ - 大数组上的段错误

javascript - 总结对象数组的频率

java - Runtime.getRuntime().exec(cmd, vars) 在 Linux 中不起作用

javascript - 如何在不使用过滤方法的情况下根据两个数组的出现次数来比较它们?

c++ - 我无法理解字符串如何转换为整数的概念