2016-07-03 108 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 ... –