parselong引发numberformatexception

jhkqcmku  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(346)
java.lang.NumberFormatException: For input string: "10"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:441)

相关代码段:

public static class NodeWritable implements Writable {

    public double msg;
    public double rank;
    public String others;

    public NodeWritable(double msg, double rank, String others) {
      this.msg = msg;
      this.rank = rank;
      this.others = others;
    }

    public NodeWritable() {
      this.msg = 0.0;
      this.rank = 0.0;
      this.others = "";
    }

    @Override
    public void write(DataOutput out) throws IOException {
      out.writeDouble(msg);
      out.writeDouble(rank);
      out.writeChars(others + "\n");
    }

    @Override
    public void readFields(DataInput in) throws IOException {
      msg = in.readDouble();
      rank = in.readDouble();
      others = in.readLine();
    }

    @Override
    public String toString() {
      return "" + rank;
    }
  }

  ArrayList<Long> incoming_vids = new ArrayList<Long>();
  for (NodeWritable msg : messages) {
    String in_vid = msg.others.trim();
    incoming_vids.add(Long.parseLong(in_vid));
  }

怎么会这样?我和谷歌做过一些研究。有时 NumberFormatException 似乎是大数字造成的。但我就是找不到一个可能的解释。

hec6srdp

hec6srdp1#

您可以循环\u vid中的字符串,并使用此命令检查是否有除数字以外的字符

for(int i=0;i<in_vid.length();i++) {
            char ch = in_vid.charAt(i);
       if( Character.isDigit(ch)) {
//   do something
}
    }

如果它不是数字,那么可以在循环中消除它,只传递有数字的字符串。

xxe27gdn

xxe27gdn2#

这实际上是一个延伸的评论,而不是一个答案。我的假设是,问题是输入字符串中的非打印字符。可以通过将代码更改为:

for (NodeWritable msg : messages) {
    String in_vid = msg.others.trim();
    try{
       incoming_vids.add(Long.parseLong(in_vid));
    } catch(NumberFormatException e){
      System.out.println(e.getMessage());
      for(char c : in_vid.toCharArray()){
        System.out.println("0x"+Integer.toHexString(c));
      }
    }
  }

此代码将导致输入字符串逐字符十六进制打印输出。
如果它是一个嵌入的非打印字符,您可能应该拒绝该字符串,并将其固定在其原始位置。

相关问题