我在尝试从 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"
有趣的是,每次我从调试器级别进行上述调用时,我都会毫无异常(exception)地获得正确的值。看起来像是与文件第一行相关的问题。
您知道问题根源在哪里吗?
最佳答案
这可能是一个不可打印的 ASCII
字符
要删除它,您可以简单地使用像这样的replaceAll方法,并使用以下正则表达式来删除 \\P{Print}
BufferedReader br = new BufferedReader(new FileReader(""));
String str=br.readLine();
str=str.replaceAll("\\P{Print}", "");
运行以下正则表达式后,您应该能够解析该值
==============================================================================
要查看它是哪个角色,您可以尝试此操作。
1) 读取该行并将其打印出来,如下所示。
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();
}
}
}
输出:
2) 现在按原样复制输出并将其粘贴到 ""
(双引号)
如您所见,特殊字符现在可见
关于java - Double.valueOf() java.lang.NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49813246/