2016-07-03 67 views
-3

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

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) 

拆分功能异常是following--

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(); 
} 
} 

请帮我出这problem.Thanks的

+0

如果使用两个或多个制表符分隔每个数字,您会发生什么? (这里是你的问题) – Tom

+1

使用你的调试器。在代码中添加System.out.println()以查找问题。消息非常清楚:你的一个部分实际上是一个空字符串。这是调试101. –

+0

你确定你传递真正的字符串到你的函数?还有“\ t”是什么意思,你确定你的字符串被“\ t”分隔而不是空格? – pooyan

回答

-1

此错误意味着这些中的一个:parts[0]parts[1]parts[2]是一个空String和不包含double值。所以Java coudn't解析它到Double。检查您正在分割的输入String以创建parts阵列。

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

检查一个工作和不工作的例子(抛出相同的错误)为同一方法,但不同的输入here

-1

如果您使用,具有以下

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 

更换

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

要确保不为空字符串它对构造函数的解析部分。

+0

现在可悲的部分:我完全错过了'str'的​​开头或结尾处的其他制表符,这是目前没有处理的,但是在你的第一个方法中^^。抱歉。顺便说一句:我没有投票在这里。 – Tom

+0

我也没有,但我猜想由于在字符串的开头或结尾处对选项卡的处理不正确,它会发生?(这是我的错虽然) – Tom

+0

@汤姆嗯,我不知道该怎么想,两个工作代码downvotes ... –