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

2 回答 2

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))
        );
    }
}
于 2014-10-29T22:38:53.113 回答
0

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

只需用于Scanner.next()获取整行,并用于substring获取单个数字。

于 2014-10-29T22:25:00.223 回答