有效数字String的NumberFormatException

时间:2013-11-03 22:52:51

标签: java string datagram parseint

我正在制作一个需要通过互联网接收数据的程序。它是使用DatagramSockets和接收DatagramPackets这样做的。这一切都很好,它收到的字节数组就是我所期望的那个。

然而,当我尝试将字节数组转换为字符串,然后转换为整数时,会发生非常奇怪的事情。

运行下面的代码会在parseInt行上显示NumberFormatException:

String length = new String(data, 1, data.length-1);
System.out.println("length = "+length);
size = Integer.parseInt(length);
System.out.println("size = "+size);

然而,当我检查data的内容时,我发现它只包含55,52,49,56,53,0,0,0,0,0,0,0,0,0,0,0,0,这很好,它是字符串“74185”。这引发了异常。

当我将“74185”硬编码为length字符串时,一切都运行良好。

这里可能出现什么问题?

2 个答案:

答案 0 :(得分:5)

您的字符串包含嵌入的\0个字符。在Java中,它们是字符串的一部分,而不是C。

所以你首先需要在字符串中找到\0的第一个匹配项,然后将子字符串放到该位置。

答案 1 :(得分:-1)

失败是因为您使用的构造函数错误。这是String(byte\[\],index,length)。第一个参数data是正确的。第二个应该是0(数组的开头是0),第三个应该是data.length

您只需使用new String(data)即可使用整个数组。

编辑:正如Roland Illig所指出的那样,你的数组包含\0个字符,这会破坏你的号码。您应该在调用之前删除那些\0,或者检查第一个\0的索引并将其用作上述构造函数+1的第三个参数。

无论如何,如果你想发送一个号码,为什么不发送一个号码而不是你必须解析的字符串呢?