【发布时间】:2017-03-11 17:11:23
【问题描述】:
我对 Integer.parseInt() 有疑问。 具体来说,我的代码是这样做的:
serverPort 变量是一个正确初始化为 1910 的 int
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) 或在最后一行使用 new 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)
【问题讨论】:
-
我的直觉是你需要修剪你的输入:
serverPort = Integer.parseInt(decodedString[1].trim());。没有你没有提供的堆栈跟踪很难说。 -
如果
decodedString[1]等于"1910"则Integer.parseInt不能抛出异常。那么,如果抛出异常,这意味着什么? -
添加了堆栈跟踪。使用 trim() 我有相同的结果。 “1910”不等于decodedString[1]
-
打印解码字符串[1].length()
标签: java integer byte numberformatexception parseint