Double.valueOf()java.lang.NumberFormatException

时间:2018-04-13 09:07:54

标签: java

尝试从csv文件读取数字时遇到以下问题。 数字格式正确,小数点也正确(点):

10;111.1;0.94
9.5;111.1;0.94
9;111.4;0.94
8.5;110.7;0.94

我逐行读取文件并将它们分成三个标记,没有空格等(例如“10”,“111.1”,“0.94”)。尽管如此,我在调用解析函数时遇到了异常:

             Double pwr = Double.parseDouble(tokens[1]);
             Double control = Double.parseDouble(tokens[0]);

             Double cos = Double.parseDouble(tokens[2]);
java.lang.NumberFormatException: For input string: "10"

当我改变行的顺序时,例如,1< - > 2,问题仍然存在,但现在我得到java.lang.NumberFormatException: For input string: "9.5" 有趣的是,每次从调试器级别进行上述调用时,我都会获得正确的值,没有异常。它看起来像是与第一行文件相关的问题。

您知道问题来源在哪里吗?

2 个答案:

答案 0 :(得分:0)

这可能是一个不可打印的Eigen::Vector2i temp1(Eigen::Vector2i::Zero()); Eigen::Vector2i temp2(0,0); // initialize all elements with a Zero vector: std::vector<Eigen::Vector2i> currTriangle(3, Eigen::Vector2i::Zero()); currTriangle[0].setZero(); // set 0th element to Zero vector currTriangle[0].setConstant(0); // equivalent to setZero, but works for arbitrary constants currTriangle[0].array() = 0; // .array() lets you do element-wise operations 字符

要删除此功能,您可以简单地使用此类的replaceAll方法,并使用以下正则表达式删除 ASCII

\\P{Print}

运行以下RegEx后,您应该能够解析值

=============================================== ============================

要查看它是哪个角色,您可以试试这个。

1)读取该行并按原样打印。

BufferedReader br = new BufferedReader(new FileReader(""));
String str=br.readLine();
str=str.replaceAll("\\P{Print}", "");

<强>输出:

enter image description here

2)现在按原样复制输出并将其粘贴到public class Test { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new FileReader("/path/to/some.csv")); String str=br.readLine(); System.out.println(str); } catch (Exception e) { e.printStackTrace(); } } } (双引号)

enter image description here

正如您所见,现在可以看到特殊字符

答案 1 :(得分:0)

[已解决] 据推测,这是文件开头的一些“隐藏”零长度字符的问题(BTW,谢谢您提供有用的建议!)。我将文件编码更改为UTF-8(菜单&gt;文件&gt;文件编码),这解决了问题。