NumberFormatException with Integer.parseInt()



我有一个问题与Integer.parseInt()。特别是我的代码是这样做的:

serverPort变量是一个int类型,正确初始化为1910

byte[] multicastMessage = (serverAddress+"::"+String.valueOf(serverPort)).getBytes();
byte[] receivedBytes = receivePacket.getData();
receivedString = new String(receivedBytes, "UTF-8");
String[] decodedString = receivedString.split("::");            
serverPort = Integer.parseInt(decodedString[1]);

注意,当我在控制台中打印decodedString[1]时,正确打印的是1910。但是当我调用Integer.parseInt()时,会引发NumberFormatException。

我也尝试使用Integer. tostring (serverPort)在第一行或使用新的Integer(decodedString[1]). intvalue()在最后一行没有成功。

我怀疑转换问题产生使用字节(我无法避免它),但我不太熟悉字节结构。

编辑:

Exception in thread "Thread-0" java.lang.NumberFormatException: For input string: "1910"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at ClientThread.run(ClientThread.java:60)

我看到你的评论,trim()仍然提供NumberFormatException。

我的下一个猜测是,有一个不可见的ASCII字符,如BOM(再见订单标记)在你的字符串的某个地方。检查这一点的最佳方法是通过以下函数运行字符串:

public static String displayCharValues(String s) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
    sb.append((int) c).append(",");
}
return sb.toString();}

如果存在BOM,那么您将看到65279作为序列的一部分打印出来。如果你的字符串包含有效的数字,那么你应该只看到与数字相关联的相应ASCII码(http://www.asciitable.com/)。您应该看到1910字符串打印为49,57,49,48。

正如@azurefrog指出的,这可能是一个空白问题。下面的程序可以正确解析:

    String receivedString = "host::1910";
    String[] decodedString = receivedString.split("::");
    int serverPort = Integer.parseInt(decodedString[1]);
    System.out.println(serverPort);

但是,如果您在1910之前添加空格,则会抛出您所指示的NumberFormatException。解决方案是使用String。修剪以删除任何空白。

    String receivedString = "host:: 1910";
    String[] decodedString = receivedString.split("::");
    int serverPort = Integer.parseInt(decodedString[1].trim());
    System.out.println(serverPort);

使用Justin L发布的解决方案。我注意到我的字符串显示为:

49, 57岁,49岁,48岁,0,0,0,0,0,0,0,0,0,0,……

(0 = blank spaces?)

但无论如何。trim()不起作用。

我使用服务器发送的不同格式的字符串进行了解析。而不是:字符串+"::"+ stringVersionOfInt我使用:字符串+"::"+ stringVersionOfInt +"::"

现在我的字符串从integer正确解析。parseint ()

的作品!谢谢大家!

相关内容

  • 没有找到相关文章

最新更新