java中的数字格式异常[重复]

Posted

技术标签:

【中文标题】java中的数字格式异常[重复]【英文标题】:Number Format Exception in java [duplicate] 【发布时间】:2016-07-03 13:18:22 【问题描述】:

我写了一个拆分函数,它的构造函数接受一个字符串对象 (For Example: 21.316621 87.01393 9830.686907).然后使用 split() 函数将其拆分为三个部分。然后将这三个新的 String Object 转换为三个基本类型 double。我想对这些双精度值执行一些算术运算,但它显示异常如下--

Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)

拆分功能如下--

public class Split 


public Split(String str)


Double[] lla = new Double[3];


    String[] parts=str.split("\t");


lla[0] = Double.parseDouble(parts[0]);


lla[1] = Double.parseDouble(parts[1]);
 lla[2]= Double.parseDouble(parts[2]);
 lla[0]+=123.567;
 lla[1]+=12.456;
 lla[2]+=76.5678;
 System.out.println(lla[0]);
 System.out.println(lla[1]);
 System.out.println(lla[2]);
 System.out.println(); 
   
 

请帮我解决这个问题。谢谢

【问题讨论】:

如果使用两个或多个制表符来分隔每个数字,您期望会发生什么? (这是你的问题) 使用你的调试器。在代码中添加 System.out.println() 来查找问题。信息很清楚:您的一部分实际上是一个空字符串。这是调试 101。 您确定将真正的字符串传递给您的函数吗?还有 "\t" 你确定你的字符串是用 "\t" 而不是空格分割的吗? @pooyan “你确定你的字符串是用“\t”而不是空格分割的吗?”异常信息会有所不同。 @Tom 你是对的,但我只是给你一个例子来理解我的理由。我可以给你的“NumberFormatException:空字符串”的例子是:“2.19 2.2\t 3.4\t” ===>[“2.19 2.2”],[“3.4”],[“”] 【参考方案1】:

如果您使用的是java-8,请替换

String[] parts = str.split("\t")

以下

String[] parts = Stream.of(str.split("\\s"))       // Split at each whitespace
                       .filter(x -> !x.isEmpty())  // Exclude empty Strings
                       .toArray(String[]::new);    // Makes a new String array of it

为了确保不是空的字符串进入构造函数的解析部分。

【讨论】:

现在可悲的是:我完全错过了str 开头或结尾的其他制表符,目前尚未处理,但在您的第一种方法中^^。对不起。顺便说一句:我还没有在这里投票。 我也不是,但我猜这是由于对字符串开头或结尾的制表符处理不正确造成的? (虽然这是我的错) @Tom 好吧,我不知道该怎么想,对工作代码投了两次反对票...【参考方案2】:

此错误意味着其中之一:parts[0]parts[1]parts[2] 是空的 String 并且不包含 double 值。所以Java 无法将其解析为Double。检查您要拆分的输入 String 以创建 parts 数组。

如果您无法修改输入,请在解析之前检查并删除 parts 数组中的空值。

检查相同方法但输入不同here 的工作和不工作示例(抛出相同的错误)。

【讨论】:

以上是关于java中的数字格式异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

由于某些字段的值未知,使用 Spark 写入 parquet 文件的数字格式异常 [重复]

Java数字格式[重复]

java中的拆分方法给出异常[重复]

java异常处理中的return语句[重复]

如何在 Java Junit 中测试异常 [重复]

PHP中的数字格式不正确[重复]