我有一个.txt文件,其中的数据写如下:
ZONEIDFROM; ZONEIDTO; DISTANCETYPE; FACILITYID;距离;
1; 2; C; HF; 9,416667;
如果zoneidfrom = 1且zoneidto = 2,我想返回距离。
除了距离是双倍之外,我的代码中的所有内容似乎都没问题。
public void Load(String filename, int zoneidfrom, int zoneidto, String mode) throws Exception{
queue.clear();
int from,to;
double dist;
String c_or_l;
BufferedReader br = new BufferedReader(new FileReader(filename));
String ligne = br.readLine(); //First line read
while(ligne != null){
ligne = br.readLine(); //First line read
String [] tab = ligne.split(";");
ArrayList<Double> d = new ArrayList<>();
d.add(Double.parseDouble(ligne));
from = Integer.parseInt(tab[0]);
to = Integer.parseInt(tab[1]);
c_or_l = tab[2];
dist = d.get(4);
if(zoneidfrom == from && zoneidto == to && c_or_l.equals(mode));{
distance(dist);
}
}
}
public double distance(double db_distance){
return db_distance;
}
答案 0 :(得分:2)
首先,您的代码未解析double的正确字符串值。你应该解析tab[4]
,而不是整行。
其次,double值包含小数分隔符的逗号。 Double.parseDouble()
未考虑Locale。
您应该使用NumberFormat
来解析双精度,同时使用适当的Locale
。
有关详细信息,请参阅this answer。
答案 1 :(得分:1)
ligne是字符串,它将是&#34; 1; 2; C; HF; 9,416667;&#34;在第一个while循环中,现在你试图将它解析为double,显然它会抛出数字格式异常。 要获得距离,Double.parseDouble(tab [4] .replace(&#34;,&#34;,&#34;。&#34;))