2016-08-24 3 views
1

에서 더블 읽기 :; ZONEIDTO, DISTANCETYPE, FACILITYID, 거리내가 데이터를 다음과 같이 기록을 .txt 파일이 .txt 파일

ZONEIDFROM을;
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; 
} 

답변

2

첫째, 코드에서 이중에 대한 올바른 문자열 값을 구문 분석하지 않습니다. 전체 줄이 아닌 tab[4]을 파싱해야합니다.

둘째, double 값에는 소수 구분 기호에 대한 쉼표가 포함됩니다. Double.parseDouble() 로캘을 고려하지 않습니다.

적절한 Locale을 사용하면서 double을 구문 분석하려면 NumberFormat을 사용해야합니다.

자세한 내용은 this answer을 참조하십시오.

1

ligne은 문자열이고 "1; 2; C; HF; 9,416667;" 첫 번째 while 루프에서 이제는 두 번 구문 분석하려고 시도합니다. 분명히 숫자 형식 예외가 발생합니다. 거리에 따라 Double.parseDouble (tab [4] .replace (",", "."))