Java:两个扫描器从相同的输入文件读取数据.可行的吗?有用的



我必须根据是否出现在它们之前的字符串是某个关键字"load"从输入文件中读取整数。没有关键数字告诉有多少数字将被输入。这些数字必须保存到数组中。为了避免为每个额外扫描的数字创建和更新一个新数组,我想使用第二个扫描仪首先查找整数的数量,然后让第一个扫描仪扫描多次,然后再返回到测试字符串。我的代码:

public static void main(String[] args) throws FileNotFoundException{
    File fileName = new File("heapops.txt");
    Scanner scanner = new Scanner(fileName);
    Scanner loadScan = new Scanner(fileName);
    String nextInput;
    int i = 0, j = 0;
    while(scanner.hasNextLine())
    {
        nextInput = scanner.next();
        System.out.println(nextInput);
        if(nextInput.equals("load"))
        {
            loadScan = scanner;
            nextInput = loadScan.next();
            while(isInteger(nextInput)){
                i++;
                nextInput = loadScan.next();
            }
            int heap[] = new int[i];
            for(j = 0; j < i; j++){
                nextInput = scanner.next();
                System.out.println(nextInput);
                heap[j] = Integer.parseInt(nextInput);
                System.out.print(" " + heap[j]);
            }
        }


    }
    scanner.close();
}

我的问题似乎是,通过loadscan(仅用于整数的辅助扫描器)进行扫描,也将主扫描器向前移动。有什么办法能阻止这一切的发生吗?有什么方法可以使编译器将scanner和loadscan视为单独的对象,尽管它们执行相同的任务?

当然可以同时从同一个File对象中读取两个Scanner对象。推进一方不会推进另一方。

假设myFile的内容为123 abc。下面的代码片段

    File file = new File("myFile");
    Scanner strFin = new Scanner(file);
    Scanner numFin = new Scanner(file);
    System.out.println(numFin.nextInt());
    System.out.println(strFin.next());

…打印以下输出…

123
123

然而,我不知道你为什么要那样做。对于您的目的,使用单个扫描器要简单得多。在下面的代码片段中,我将我的命名为fin

String next;
ArrayList<Integer> readIntegers = new ArrayList<>();
while (fin.hasNext()) {
    next = fin.next();
    while (next.equals("load") {
        next = fin.next();
        while (isInteger(next)) {
            readIntegers.Add(Integer.parseInt(next));
            next = fin.next();
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新