Java 将文本文件读取到arrayList并排序
这是我的txt文件“Q.txt”的一个片段 我需要对我的文本文件“Q.txt”进行排序,它包含一个double和一个字符串。 它用“:”分隔,在每个短语的末尾有(“^FinishedLine”)。当我运行这个程序时,它只会出现一个“NumberFormatException:empty string”错误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(); 字符串行=”;
公共类排序{
公共静态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());
}
}
}