2017-03-28 22 views
-2

這是我的txt文件「Q.txt」的一個片段。讀取文本文件到arrayList並排序

12.54778255173505 :  ^FinishedLine 
15.416218875438748 : 
^FinishedLine 
16.245508427720914 : ^FinishedLine 
9.595696051997852 : &^FinishedLine 
11.971100145959943 : ! '^FinishedLine 
11.678678199807727 : " $^FinishedLine 
14.905855346233682 : # %^FinishedLine 
15.98343143372184 : $ "^FinishedLine 
16.053542916378102 : % #^FinishedLine 

我需要對包含雙精度和字符串的文本文件「Q.txt」進行排序。 它使用「:」分隔,並且在每個短語結尾處有(「^ FinishedLine」)。當我運行這個時,所有它是一個「NumberFormatException:空字符串」錯誤。

public class Sorting { 

     public static void sort() throws IOException { 

     Scanner s = new Scanner(new File("Q.txt")); 
     ArrayList<Qpair> set = new ArrayList<>(); 
     String line = ""; 
     while (s.hasNext()) { 
      String[] parts = line.split(" : "); 
      set.add(new Qpair(Double.parseDouble(parts[0]), parts[1])); 
      s.useDelimiter("^FinishedLine"); 

     } 


     s.close(); 

     System.out.println(set); 

    } 

    private static class Qpair{ 
     private double d; 
     private String s; 
     public Qpair(double d, String s){ 
     this.d = d; 
     this.s = s;  
     } 

     public double getDouble(){ 
     return d; 
     } 

     public String getString(){ 
     return s; 
     } 

    } 

    private static class QpairCompare implements Comparator<Qpair>{ 
     public int compare(Qpair x, Qpair y){ 
     return (int) (x.getDouble() - y.getDouble()); 

     } 
    } 

    } 
+0

[如何將包含矩陣形式的數據的txt文件讀入到與使用java的文件中相同維數的2d數組中]的可能重複(http://stackoverflow.com/questions/5828491/how-to-read- a-txt-file-containing-matrix-form-of-data-into-2d-array-of-same-dime) –

+0

@hutcec,確保你的第三行不是你的代碼的新行,否則會失敗 – cralfaro

+0

您可以嘗試使用Double.valueOf()而不是parseDouble()。它不會拋出異常(如果這真的是你的問題的原因) – Araneo

回答

0

據我所見:您正在將line設置爲空字符串。您輸入while循環而不更改line。您將此空字符串拆分爲:。我承認我不得不嘗試一下:它產生一個1個元素的數組,一個空字符串。您嘗試從數組中解析這個空字符串作爲double。

而你告訴我們你得到NumberFormatException: empty string。聽起來像是同意我。

我希望你能弄清楚哪些代碼行缺失以及你應該在哪裏插入它?

相關問題