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中的数字格式异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章