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
似乎是大数字造成的。但我就是找不到一个可能的解释。
2条答案
按热度按时间hec6srdp1#
您可以循环\u vid中的字符串,并使用此命令检查是否有除数字以外的字符
如果它不是数字,那么可以在循环中消除它,只传递有数字的字符串。
xxe27gdn2#
这实际上是一个延伸的评论,而不是一个答案。我的假设是,问题是输入字符串中的非打印字符。可以通过将代码更改为:
此代码将导致输入字符串逐字符十六进制打印输出。
如果它是一个嵌入的非打印字符,您可能应该拒绝该字符串,并将其固定在其原始位置。