Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NumberFormatException:对于输入字符串:";5._Java_String_Numberformatexception - Fatal编程技术网

java.lang.NumberFormatException:对于输入字符串:";5.

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); }

当我运行此Java代码时:

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();