Java 使用扫描仪读取文件

Java 使用扫描仪读取文件,java,java.util.scanner,Java,Java.util.scanner,我正在使用扫描仪读取包含*、空格和字母的文本文件。两个或多个空格可以依次出现。例如: **** AAAAA* * **** ******* AAAAAA*** * 我编写了以下代码: lineTokenizer = new Scanner(s.nextLine()); int i=0; if (lineTokenizer.hasNext()) { //lineTokenizer.useDelimiter("\\s"); System.out.println

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

****  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不会从输入文件中读取超出*的字符,而不是存储在迷宫数组中的字符。你能告诉我哪里出了问题吗?谢谢

我认为应该使用循环,而不是仅仅使用if

尝试将第三行更改为:

while (lineTokenizer.hasNext())

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

尝试将第三行更改为:

while (lineTokenizer.hasNext())

您还可以使用
FileInputStreams
使用
BufferedReader
读取文件


我个人使用
扫描仪
仅用于控制台输入。

您也可以使用
文件输入流
使用
缓冲读取器
读取文件


我个人使用
扫描仪
仅用于控制台输入。

我猜当您尝试不同的东西时,代码被更改了很多次。 我不知道如何处理迷宫的初始化,但为了避免任何ArrayIndexOutOfBounds,我会使用列表中的列表。 我对你想要什么做了一些猜测,并提出以下建议:

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();
List maze=new ArrayList();
扫描器s=新扫描器(“*****AAAA************\n**********AAAA****”);
而(s.hasNextLine()){
列表行=新的ArrayList();
Scanner lineTokenizer=新扫描仪(s.nextLine());
lineTokenizer.useDelimiter(\\s+);
while(lineTokenizer.hasNext()){
字符串数据=lineTokenizer.next();
系统输出打印项次(数据);
行。添加(数据);
}
lineTokenizer.close();
添加(行);
}
s、 close();
我没有完全理解你的目标。这是你想要的吗?
上面的代码将为您提供以下列表:
[[[****,AAAA*,*,****,[****,AAAA***,*]

我猜在您尝试不同的东西时,代码已经更改了很多次。 我不知道如何处理迷宫的初始化,但为了避免任何ArrayIndexOutOfBounds,我会使用列表中的列表。 我对你想要什么做了一些猜测,并提出以下建议:

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();
List maze=new ArrayList();
扫描器s=新扫描器(“*****AAAA************\n**********AAAA****”);
而(s.hasNextLine()){
列表行=新的ArrayList();
Scanner lineTokenizer=新扫描仪(s.nextLine());
lineTokenizer.useDelimiter(\\s+);
while(lineTokenizer.hasNext()){
字符串数据=lineTokenizer.next();
系统输出打印项次(数据);
行。添加(数据);
}
lineTokenizer.close();
添加(行);
}
s、 close();
我没有完全理解你的目标。这是你想要的吗?
上面的代码将为您提供以下列表:
[[****,AAAA*,*,****,[****,AAAAA***,***]

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

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

您希望实现什么目标?我无法从你的描述中猜出来。@RomainSertelon我正在尝试读取文件并将其放入2D数组中。文件中的行可能有2/多个空格。您希望实现什么?我无法从你的描述中猜出来。@RomainSertelon我正在尝试读取文件并将其放入2D数组中。文件中的行可能有2/多个空格。但是lineTokenizer.hasNext()不应该读取一行中的字符吗?也许我应该把s.nextLine()放一会儿。但是我怎样才能一个接一个地读取两个空格呢?lineTokenizer.hasNext()检查是否还有剩余的标记。它不会前进到下一个令牌。使用第一行输入,您希望实现什么?你想得到“****”、“AAAAA*”等吗?我也想得到空格。在我编写的代码中,读取在遇到空格后停止。但是lineTokenizer.hasNext()不应该读取一行中的字符吗?也许我应该把s.nextLine()放一会儿。但是我怎样才能一个接一个地读取两个空格呢?lineTokenizer.hasNext()检查是否还有剩余的标记。它不会前进到下一个令牌。使用第一行输入,您希望实现什么?你想得到“****”、“AAAAA*”等吗?我也想得到空格。在我编写的代码中,遇到空格后读取停止。谢谢!我来试试。谢谢!我来试试。谢谢。但是我想从文件中读取连续的空格(逐字符),并将它们存储在单个2D数组单元格中。谢谢。但我想从文件中读取连续的空格(逐字符),并将其存储在单个2D数组单元格中。是的,尝试添加while,但遇到空格后不会移动。这取决于while内部使用的条件。是的,尝试添加while,但一旦遇到空格,它就不会超过。这取决于while中使用的条件。