java - 使用 Java 扫描器比较两个文件时的 NoSuchElementExcpetion

标签 java automation java.util.scanner

我正在尝试了解网络应用程序(L10N)自动化本地化测试的可能性。首先,我们决定看看是否可以在不打开应用程序的情况下在文件中收集 HTML 纯文本(母语)并将其与我们拥有的术语表进行比较。 我可以使用 jsoup 获取纯文本。现在我尝试将这两个文件与以下代码进行比较:

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

class CompareFiles{
    public static void main(String args[]) throws Exception{

        Scanner kb = new Scanner(System.in);
        String name;
        String curr;

        java.io.File dictionary = new java.io.File("./src/main/resources/Google_JP.txt");
        Scanner dictScanner = new Scanner(dictionary); 

        java.io.File list = new java.io.File("./src/main/resources/Google_JP_HTML.txt");
        Scanner listScanner = new Scanner(list);  
        try
        {
        while(dictScanner.hasNextLine()){
            System.out.println("inside dictonary scanner");
            curr=dictScanner.next();
            while(listScanner.hasNextLine()){
                System.out.println("inside list scanner");
                name=listScanner.next();

                if(curr.contains(name)) System.out.println(name);
            }
        }
    }
        catch(NoSuchElementException e)
        {
            e.printStackTrace();
        }
    }

}

现在上面代码的问题是,因为我在 name=listScanner.next(); 上收到 NoSuchElementException ,所以我尝试处理异常并关闭扫描仪。这样,它只比较 html 文件的第一个单词。我应该如何让它工作,以便它显示所有匹配的单词?

此外,我不确定我是否遵循正确的方法来满足要求。

最佳答案

在我看来,好像您需要在每次循环迭代中重新初始化扫描仪,因为您在第一次迭代中耗尽了扫描仪

发生的事情似乎是:

  1. curr 是 dictScanner 的第一行
  2. 循环 nameScanner
    • 当前与所有名称进行比较
    • 名称扫描仪现在为空
  3. 当前设置为第二行
  4. 循环遍历已耗尽的 nameScanner

建议的更改:

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

class CompareFiles{
    public static void main(String args[]) throws Exception{

        Scanner kb = new Scanner(System.in);
        String name;
        String curr;

        java.io.File dictionary = new java.io.File("./src/main/resources/Google_JP.txt");
        Scanner dictScanner = new Scanner(dictionary); 

        java.io.File list = new java.io.File("./src/main/resources/Google_JP_HTML.txt");
        //Scanner listScanner = new Scanner(list);  
        try
        {
        while(dictScanner.hasNextLine()){
            System.out.println("inside dictonary scanner");
            curr=dictScanner.next();
            try (Scanner listScanner = new Scanner(list);){
                while(listScanner.hasNextLine()){
                    System.out.println("inside list scanner");
                    name=listScanner.next();

                    if(curr.contains(name)) System.out.println(name);
                }
            }
        }
    } catch(NoSuchElementException e) {
            e.printStackTrace();
    }
}

}

关于java - 使用 Java 扫描器比较两个文件时的 NoSuchElementExcpetion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33801322/

相关文章:

java - 如何将位图添加到图库中的特定相册?

java - 解决 Java 中不明确的结构

com - 如何把IE9的WebBrowser控件纳入标准?

javascript - 如何获取网页中元素的x,y坐标?

java - 来自 DefaultListModel 的 NullPointerException

testing - 在构建负载时动态设置 XML 标记值

java - FileInputStream 未读取第一个值

java - Scanner.nextInt() NoSuchElementException

java - 如何修复我的扫描仪文件阅读器的 java.util.InputMismatchException?

java - 使用 beans.xml 文件进行 CDI bean 配置