繁体   English   中英

为什么不能两次调用 scanEverything 方法? 它只打印一次 arrayList,第二个 println 显示一个空列表

[英]Why is it not possible to call the scanEverything method twice? It only prints out the arrayList once, and the second println shows an empty list

我在与其他文件相同的文件夹中有一个test1.txt文件。 例如,它有以下数据: Hello Hello Hello 我的代码只打印一次。 我调用了该方法两次,但第二个 println 显示了一个空的数组列表。

跑:

[hello, hello, hello]
[]
BUILD SUCCESSFUL (total time: 0 seconds)

代码:

import java.io.*;
import java.util.*;

public class Text {

    public static void main(String[] args) throws FileNotFoundException {
      
            Scanner keyboard = new Scanner(System.in);

            String firstFileName = "test1.txt";
            Scanner scan1 = new Scanner(new File(firstFileName));

            
            System.out.println(scanEverything(scan1));
            System.out.println(scanEverything(scan1));
    }

    public static ArrayList<String> scanEverything(Scanner scan) {
        ArrayList<String> text = new ArrayList<>();
        while (scan.hasNext()) {
            String nextWord = scan.next().toLowerCase();
            text.add(nextWord);
        }
        Collections.sort(text);
        return text;
    }

在您调用 scanEverything 之后,Scanner 被“消耗”,即scan.hasNext()将返回 false。

如果你想再次扫描文件,你必须重新创建扫描器(详细信息请参见此处: Java Scanner "rewind"

您定义为“scan1”的扫描器在第一次函数调用后被消耗,您必须使用不同的扫描器或关闭第一个扫描器“scan1”并再次启动它。

例如。

调用函数scanEverything 后使用以下

scan1.close();
scan1 = new Scanner(new File(firstFileName));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM