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

时间:2014-10-31 07:23:53

标签: java arrays string bytearray

我有一个发送和接收信息的UDP服务器/客户端。 Client会将示例"TEST"发送到服务器,服务器将在"TEST"数组表示中接收byte[],并使用{{1}将其转换为String构造函数。然后,我需要使用String(byte[])方法将收到的新String与另一个字符串进行比较。但它不起作用......

以下是我的代码示例:

equalsIgnoreCase

有什么想法吗?

5 个答案:

答案 0 :(得分:5)

最可能的解释是,sentence中的字符串不是"TEST",而是看起来像 "TEST"的内容。最可能的字符串是:

  • " TEST""TEST "
  • "TEST\n"

但您也可能在客户端字符串或服务器代码中有homoglyph


  

好吧,所以我发现使用了句子长度为1024个字符的句子。长度...如果我取一个子串,特别是sentence.substring(0,4)。

阿。所以问题是(可能)你忽略了接收数据包的大小,并将整个缓冲区数组包含在字符串中。

提取字符串的最正确方法是:

new String(receivePacket.getData(),
           receivePacket.getOffset(),
           receivePacket.getLength(), "UTF-8");

......虽然我认为在前面的陈述中偏移量将为零。

(但客户端也可能正在发送NUL字节......在这种情况下,您还需要在客户端更改内容。)

答案 1 :(得分:1)

像这样创建字符串对象

String msg = new String(receiveData, 0, receivePacket.length);

而不是

String sentence = new String(receivePacket.getData(), "UTF-8");

在您的代码中将获取数据,但它也有额外的内容。例如,在您的receiveData大小设置为10时,将从您的数据包对象中读取。现在对于“测试”,它将在你的receiveData中使用4个块,其余的块,即6个为null,这样所有都将在你的句子对象中使用。这就是为什么句子不匹配。

对于测试,只需按照这种方式打印您的句子对象

Log.e("Sentence",""+sentence);

答案 2 :(得分:1)

我认为receiveData长于4,因此转换的字符串中也包含尾随字节。新String时应该切断尾随字节(字节0)。

答案 3 :(得分:0)

"TEST ""TEST"不相等。 验证字符串长度。

System.out.println(sentence.length());

使用以下方法删除空格:

sentence = sentence.trim();

答案 4 :(得分:0)

Java tutorial使用:

String received = new String(packet.getData(), 0, packet.getLength());

从收到的数据包中获取字符串;在你的情况下,你将有:

String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());