Java 将文本文件读取到arrayList并排序

Java 将文本文件读取到arrayList并排序,java,parsing,arraylist,split,java.util.scanner,Java,Parsing,Arraylist,Split,Java.util.scanner,这是我的txt文件“Q.txt”的一个片段 我需要对我的文本文件“Q.txt”进行排序,它包含一个double和一个字符串。 它用“:”分隔,在每个短语的末尾有(“^FinishedLine”)。当我运行这个程序时,它只会出现一个“NumberFormatException:empty string”错误 公共类排序{ 公共静态void sort()引发IOException{ 扫描仪s=新扫描仪(新文件(“Q.txt”); ArrayList集合=新的ArrayList(); 字符串行=”;

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

我需要对我的文本文件“Q.txt”进行排序,它包含一个double和一个字符串。 它用“:”分隔,在每个短语的末尾有(“^FinishedLine”)。当我运行这个程序时,它只会出现一个“NumberFormatException:empty string”错误

公共类排序{
公共静态void sort()引发IOException{
扫描仪s=新扫描仪(新文件(“Q.txt”);
ArrayList集合=新的ArrayList();
字符串行=”;
而(s.hasNext()){
String[]parts=line.split(“:”);
set.add(新的Qpair(Double.parseDouble(parts[0]),parts[1]);
s、 使用分隔符(“^FinishedLine”);
}
s、 close();
系统输出打印项次(套);
}
专用静态类Qpair{
私人双d;
私有字符串;
公共Qpair(双d,字符串s){
这个。d=d;
这个.s=s;
}
公共双精度getDouble(){
返回d;
}
公共字符串getString(){
返回s;
}
}
专用静态类QpairCompare实现了Comparator{
公共整数比较(Qpair x、Qpair y){
返回(int)(x.getDouble()-y.getDouble());
}
}
}

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

你告诉我们你得到了
NumberFormatException:empty string
。听起来像是同意


我希望您能找出缺少的代码行以及应该将其插入的位置?

可能重复@hutcec,请确保您的第三行不是代码的新行,否则将失败。您可以尝试使用Double.valueOf()而不是parseDouble()。它不会引发异常(如果这确实是您出现问题的原因),我想您的问题在于当您尝试对“^FinishedLine”执行拆分(“:”)时,[0]部分的双精度值将是双精度的。值(“^FinishedLine”)和崩溃。。。
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
  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());

      }
    }

  }