0

次のようなテキスト ファイルを読み込もうとしています。

Cycle [numberOfWheels=4.0, weight=1500.0]

コードは正しく実行されますが、double は認識されません。出力は次のとおり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 に答える