将文本文件读取到arrayList并进行排序

时间:2017-03-28 13:24:38

标签: java parsing arraylist split java.util.scanner

这是我的txt文件“Q.txt”的片段。

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

我需要对包含double和字符串的文本文件“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());

      }
    }

  }

1 个答案:

答案 0 :(得分:0)

据我所知:您正在将line设置为空字符串。您输入while循环而不更改line。您将此空字符串拆分为:。我承认我必须尝试才能确定:它产生一个1个元素的数组,一个空字符串。您尝试将此数组中的空字符串解析为double。

你告诉我们你得到NumberFormatException: empty string。听起来像是和我达成协议。

我希望你能弄清楚缺少哪些代码行以及应该在哪里插入它?