0

我正在使用扫描仪读取包含 *、空格和字母的文本文件。两个或多个空格可以一个接一个出现。例如:

****  AAAAA* *    ****
    *******    AAAAAA*** *

我写了以下代码:

lineTokenizer = new Scanner(s.nextLine());
int i=0;
if (lineTokenizer.hasNext()) {
    //lineTokenizer.useDelimiter("\\s");
    System.out.println(lineTokenizer.next());
    //maze[0][i]=lineTokenizer.next();
    i++;
}

lineTokenizer 不会从输入文件中读取超出 * 的内容,而不是将字符存储在迷宫数组中。你能告诉我哪里出错了吗?谢谢!

4

4 回答 4

2

You could also use FileInputStreams to read the file with a BufferedReader.

I personnally use the Scanner only for console input.

于 2013-02-21T08:13:45.920 回答
1

我认为你应该使用循环而不是 if。

尝试将第 3 行更改为:

while (lineTokenizer.hasNext())
于 2013-02-21T08:04:17.430 回答
1

由于您使用的是if条件,因此指针不会向前移动。您应该使用循环从扫描仪连续读取数据。希望有帮助。

于 2013-02-21T08:25:04.893 回答
0

我想当你尝试不同的东西时,代码会被多次更改。我不知道你如何处理迷宫的初始化,但为了避免任何 ArrayIndexOutOfBounds 我会在 List 中使用 List 。我对你想要的东西做了一些猜测并提出了这个:

List<List<String>> maze = new ArrayList<>();        
Scanner s = new Scanner("****  AAAAA* *    ****\n    *******    AAAAAA*** *");
while (s.hasNextLine()) {
    List<String> line = new ArrayList<>();
    Scanner lineTokenizer = new Scanner(s.nextLine());
    lineTokenizer.useDelimiter("\\s+");
    while (lineTokenizer.hasNext()) {
        String data = lineTokenizer.next();
        System.out.println(data);
        line.add(data);
    }
    lineTokenizer.close();
    maze.add(line);
}
s.close();

我没有完全理解你的目标。这是否符合您的要求?上面的代码将为您提供以下列表:[[****, AAAAA*, *, ****], [*******, AAAAAA***, *]]

于 2013-02-21T08:18:23.967 回答