java - Double.valueOf() java.lang.NumberFormatException

标签 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" 有趣的是,每次我从调试器级别进行上述调用时,我都会毫无异常(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();
        }
    }
}

输出:

enter image description here

2) 现在按原样复制输出并将其粘贴到 ""(双引号)

enter image description here

如您所见,特殊字符现在可见

关于java - Double.valueOf() java.lang.NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49813246/

相关文章:

java - 需要一种方法以黑/白方式获取图像中的文本

java - java.exe、javaw.exe和jvm.dll的区别

java - 领域驱动设计中工厂和接口(interface)的使用

java - 使用 JSTL 迭代列表内的集合

java - 在 java 中,如何删除 sqlite 表?

java - 将 SQL 数据库中的信息写入列表

java - 在 JTable 中禁用拖动选择

java - 如何在java中生成不重复的随机字符串

java - 还有其他方法可以使用监听器在单击按钮时调用方法吗?

java套接字占用过多的cpu%和虚拟内存