输入不匹配异常加倍

时间:2014-10-29 22:16:53

标签: java inputmismatchexception

我正在尝试阅读一个文字文件:

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

2 个答案:

答案 0 :(得分:0)

默认情况下,

Scanner使用空格作为分隔符。由于您的文件在数字之间没有空格,因此它显示为[numberOfWheels=4.0,,而不仅仅是4.0

只需使用Scanner.next()即可获得整行,并使用substring获取各个数字。

答案 1 :(得分:0)

您应手动解析复杂输入,例如通过词法解析器(antlr)或使用regexp:

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