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

您不能让扫描仪自动忽略输入,但您可以编写代码自己跳过输入,直到看到双精度可用:

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 回答