【发布时间】:2017-03-28 13:24:37
【问题描述】:
这是我的txt文件“Q.txt”的sn-p。
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());
}
}
}
【问题讨论】:
-
@hutcec,请确保您的第三行代码不是新行,否则会失败
-
您可以尝试使用 Double.valueOf() 而不是 parseDouble()。它不会抛出异常(如果它真的是你的问题的原因)
-
我猜你的问题是当你尝试对“^FinishedLine”进行 split(":") 时,part[0] 的 Double 值将是 Double.valueof(" ^FinishedLine") 和崩溃...
标签: java parsing arraylist split java.util.scanner