java.lang.NumberFormatException:对于输入字符串:";5.
当我运行此Java代码时:java.lang.NumberFormatException:对于输入字符串:";5.,java,string,numberformatexception,Java,String,Numberformatexception,当我运行此Java代码时: public void run(){ String stringPacketData=null; try { stringPacketData = new String(clientPacketData,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); System.exit(1); }
public void run(){
String stringPacketData=null;
try {
stringPacketData = new String(clientPacketData,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
System.exit(1);
}
String[] splitString=stringPacketData.split("@");
this.clientID = Integer.parseInt(splitString[0]);
String op="";
op=splitString[1];
if(op.equalsIgnoreCase("popola_cache")){
popolamentoCache(Integer.parseInt(splitString[2]));
}
else{
System.exit(0);
}
}
其中,stringPacketData具有以下格式:idClient@operationType@dimCache,它将抛出此Exception:
Exception in thread "Thread-2" java.lang.NumberFormatException: For input string: "5"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at UDPSocketBased.WorkerUDP.run(WorkerUDP.java:53)
WorkerUDP.java:53语句对应于:
popolamentoCache(Integer.parseInt(splitString[2])
我不明白为什么我的输入字符串“5”的格式不正确。在尝试解析字符串之前,首先需要修剪字符串
this.clientID = Integer.parseInt(splitString[0].trim());
我是这样解决的:
popolamentoCache(Integer.parseInt(String.valueOf(splitString[2].charAt(0))));
问题是我收到了一个名为“pkt”的数据包:
因此,当我通过以下方式获取数据包数据时:
clientPacketData=pkt.getData();
它考虑65508字节的有效负载长度,与stringPacketData长度相同
谢谢 尝试放置一个分隔符,与在文本文件开头拆分字符串时使用的分隔符相同。这样可以避免第一个字符引发异常的情况,因为它不是整数。打印数字并检查显示的内容
5
或与5
一起使用的东西是否可能解析的字符串包含一些无法打印的字符?您是否可以打印其所有字符的所有代码点,如System.out.println(Arrays.toString(yourString.chars().toArray())
(假设您可以访问Java 8。是否检查了正在解析的字符串的长度?非打印字符可能会导致异常,而不会在消息中显示。您是否可以打印“clientPacketData”并发布结果?我认为splitString[2]
包含字符串结尾“\n”尝试拆分字符串[2]。替换(“\n”,”)。替换(“\r”,”)这是一个很好的方法,但trim不会删除一些特殊字符。trim就是一个例子,您可以使用正则表达式来提取@caracters之间的数字,我认为这种情况更好
clientPacketData=pkt.getData();