2014-10-29 68 views
0

我想读的文本文件,上面写着:输入匹配异常双

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)) 
     ); 
    } 
}