2016-02-18 5 views
2

Я пытаюсь прочитать двойной файл из файла, но у меня есть это исключение: java.util.InputMismatchException. Я попытался сделать useLocale (Locale.US), но он не работает.Как читать double в java из файла

Это мой код

public static void main(String[] args){ 
    System.out.println("Introduce the name of the file"); 
    Scanner teclat = new Scanner(System.in); 
    teclat.useLocale(Locale.US); 
    Scanner fitxer = new Scanner(new File(teclat.nextLine())); 
    while(fitxer.hasNext()){ 
      String origen=fitxer.next(); 
      String desti=fitxer.next(); 
      double distancia=fitxer.nextDouble(); 
      System.out.println(origen); 
      System.out.println(desti); 
      System.out.println(distancia); 
      ... 

    } 
} 

Сейчас здесь находится содержимое файла, что я должен прочитать.

city1 City2 расстояние (км)

строка строка двойной

Barcelona Madrid 3005.15 
Barcelona Valencia 750 
Los_Angeles Toronto 8026.3 
...... 
+0

[Chek this out] (http://stackoverflow.com/questions/5769669/convert-string-to-double-in-java) – tumisma

ответ

1

Вы можете, как это:

String str = "Barcelona Madrid 3005.15"; 
double value = Double.parseDouble(str.split(" ")[2]); 

Или, если вы хотите использовать регулярные выражения вы также можете сделать это, как показано ниже :

Pattern pattern = Pattern.compile("\\d+\\.\\d+"); 
Matcher matcher = pattern.matcher("Barcelona Madrid 3005.15"); 
if (matcher.find()) { 
    double value = Double.parseDouble(matcher.group()); 
    System.out.println("value = " + value); 
} 

Надеюсь, что эта помощь.

0

Поскольку у вас есть происхождение, назначение и расстояние кортежей в одной строке, лучше сначала прочитать строку, а затем разбить на слова. Я вижу в вашем последнем примере, что даже когда имя имеет две части, они написаны с символами подчеркивания _ вместо пространства. Таким образом, мы можем безопасно разделить пространство.

Попробуйте с этим кодом:

import java.io.*; 

public class Test { 
    public static void main(String [] args) { 

     String fileName = "file.txt"; 

     String line = null; 

     try { 
      FileReader fileReader = new FileReader(fileName); 

      BufferedReader bufferedReader = new BufferedReader(fileReader); 

      while((line = bufferedReader.readLine()) != null) { 
       String[] parts = line.split(" "); 
       String origen=parts[0]; 
       String desti=parts[1]; 
       double distancia=Double.parseDouble(parts[2]); 
       System.out.println(origen); 
       System.out.println(desti); 
       System.out.println(distancia); 
      } 

      bufferedReader.close();   
     } 
     catch(FileNotFoundException ex) { 
      System.out.println("Unable to open file '" + fileName + "'");     
     } 
     catch(IOException ex) { 
      System.out.println("Error reading file '" + fileName + "'"); 
     } 
    } 
} 
0

Вы не устанавливая Locale для второго Scanner вы на самом деле читать ваш двойник из.

Добавьте это, и ваш код должен работать:

fitxer.useLocale(Locale.US); 

Обратите внимание, что вам не нужно, чтобы установить Locale для первого сканера, только там передавать строки, а не работать с double форматирования ,

Смежные вопросы