1

いくつかの数字を入れたファイルがありますが、次のように、それぞれの数字に名前を付けてラベルを付けたいと思いました。

A = 1 2 3
B = 3 4 5
C = 6 7 8

これにより、例外がスローされました。これを回避する方法を知りたいので、特に指定しない限り、スキャナーは数字以外をすべて「無視」します。

誰でも助けることができますか?

編集:

また、例外の原因はすでにわかっています。私は next.Double(); を使用しています。ファイル内の番号を選択します。

public static void readFile() throws IOException, FileNotFoundException {

    String fileName = "vectors.txt";


    // Reference the file using the the BufferedReader object
    BufferedReader input = new BufferedReader(new FileReader(fileName));    

    //scanner to scan through file 
    Scanner token = new Scanner(input);

    double fileX = token.nextDouble();
    double fileY = token.nextDouble();
    double fileZ = token.nextDouble();

    vecA = new Vector3D(fileX,fileY,fileZ);

    fileX = token.nextDouble();
    fileY= token.nextDouble();
    fileZ = token.nextDouble();

    vecB = new Vector3D(fileX, fileY, fileZ);

    fileX = token.nextDouble();
    fileY= token.nextDouble();
    fileZ = token.nextDouble();

    //initialize vecC using double values from third line of file
    vecC = new Vector3D(fileX, fileY, fileZ);


    //close file 
    input.close();


}
4

3 に答える 3

3

スキャナーに入力を自動的に無視させることはできませんが、double が使用可能になるまで入力をスキップするコードを自分で書くことができます。

while (!scanner.hasNextDouble()) {
    scanner.next();
}
double d = scanner.nextDouble();

このコードを複数の場所に配置する必要がある場合は、関数でラップできます。

private static double skipAndGetDouble(Scanner scanner) {
    while (scanner.hasNext() && !scanner.hasNextDouble()) {
        scanner.next();
    }
    return scanner.hasNextDouble() ? scanner.nextDouble() : Double.NaN;
}
于 2012-10-06T00:57:20.517 に答える
0

非常に派手になり、過剰な解決策を考え出す場合は、スキャナーの区切り文字を変更してみてください。ここで API を確認してください。

于 2012-10-06T00:59:37.947 に答える
0

スキャンされるデータにとって意味のあるテキストを解析する必要があります。したがって、あなたの場合、保持される基本的なタイプの情報を繰り返す行があります-ループを使用することを意味します-コードを不必要に繰り返さないでください。疑似コードで

create a Scanner object read the file, say called fileScanner
while still lines to be read (fileScanner.hasNextLine())
  read line with fileScanner using .nextLine()
  Create a new Scanner object, lineScanner to get tokens in line.
  Use lineScanner to get `next` String via `.next()` and store
  Use lineScanner to get `next` String via `.next()` (the `=`) and ignore
  Use lineScanner to get 3 doubles.
  close line scanner
  Store all info in object and place in ArrayList or some other collection
end while
close fileScanner
于 2012-10-06T01:00:44.913 に答える