2014-10-29 3 views
0

Я пытаюсь прочитать текстовый файл, который говорит:Input Несовпадение Исключение двойного

Cycle [numberOfWheels=4.0, weight=1500.0] 

код работает правильно, но он не признает двойников. выход: Cycle [numberOfWheels= 0.0, weight= 0.0].

  import java.io.File; 
      import java.io.FileNotFoundException; 
      import java.util.Scanner; 

      public class Cycle { 
      public static double numberOfWheels; 
      public static double weight; 

      public Cycle(double numberOfWheels, double weight) 
      { 
      this.numberOfWheels=numberOfWheels; 
      this.weight=weight; 
      } 

      @Override 
      public String toString() { 
      return "Cycle [numberOfWheels= " + numberOfWheels + ", weight= " + weight 
      + "]"; 
      } 

      public static void main(String[] args) throws FileNotFoundException 
      { 
      // TODO Auto-generated method stub 

      File text = new File("C:/Users/My/workspace/CycleOutput/Cycle.txt"); 

      try { 

       Scanner sc = new Scanner(text); 

       while (sc.hasNextDouble()) 
       { 
       numberOfWheels=sc.nextDouble(); 
       } 

       while (sc.hasNextDouble()) 
       { 
       sc.next(); 
       } 
       } 
      catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

      Cycle cycle1=new Cycle(numberOfWheels, weight); 
      System.out.println(cycle1.toString()); 
     } 
    } 

ответ

0

Scanner, по умолчанию используется пробел в качестве разделителя. Поскольку у вашего файла нет пробелов между номерами, он читает [numberOfWheels=4.0,, а не только 4.0.

Просто используйте Scanner.next(), чтобы получить всю строку, и используйте substring, чтобы получить индивидуальные номера.

0

Вы должны разобрать сложный ввод вручную, например. по лексическому парсеру (antlr) или с регулярным выражением:

Scanner sc = new Scanner(new StringReader("Cycle [numberOfWheels=4.0, weight=1500.0]\n")); 
Pattern pattern = Pattern.compile("Cycle\\s*\\[numberOfWheels=(.*),\\s*weight=(.*)\\]"); 
while (sc.hasNextLine()) { 
    Matcher matcher = pattern.matcher(sc.nextLine()); 
    if (matcher.matches()) { 
     return new Circle(
      Double.parseDouble(matcher.group(1)), 
      Double.parseDouble(matcher.group(2)) 
     ); 
    } 
} 
Смежные вопросы