我需要使用扫描仪和 JFIleChooser 计算子字符串在文件中出现的次数

I need to count the number of times a substring occurs in a file using scanner and JFIleChooser

我正在努力学习 Java,我想知道如何计算子字符串在所选文本文件中出现的次数并将其输出到控制台。例如,假设我使用 JFileChooser 从我的计算机中获取一个文本文件,我想知道子字符串 "if" 或 "ot" 在该文件中出现了多少次。如有任何帮助,我们将不胜感激!

import java.util.Scanner;
import javax.swing.JFileChooser;

public class FileReader {
    public static void main(String[] args) {
        int count = 0;
        JFileChooser chooser = new JFileChooser();
        Scanner in = new Scanner(/* How do I get the file? */);
        { // file read
            while (in.hasNext()) {
                count++;
                in.next();
            }
            System.out.println("The word count is " + count);
        }
    }
}

您需要做的第一件事是实际显示打开的对话框。您可以使用方法 showOpenDialog 来完成此操作。之后,您想通过调用 chooser.getSelectedFile() 从选择器中获取选定的文件。此文件存储在变量 file.

现在,您需要打开文件进行阅读。在 Java 中,您使用 FileInputStream 执行此操作。您可以将其传递给 class Scanner 的构造函数,连同您期望文件编码方式的字符编码。

现在,您已经初始化了扫描仪。为确保完成后所有资源都被释放,您可以使用 Java 的 try-with-resource 语句,其形式为

try (/* open resource */) {/* use resource */}

在这种情况下,扫描仪是应该关闭的资源。当扫描仪关闭时,文件也关闭。

那么,你只想统计单词"if"和"ot"出现的次数。为此,您首先要阅读单词。之后,检查它是否等于预期的单词之一。如果是,则增加计数器。请注意,在 Java 中,您不能使用 == 运算符比较字符串。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.swing.JFileChooser;

public class FileReader {
    public static void main(String[] args) throws FileNotFoundException {
        int count = 0;
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        try (Scanner in = new Scanner(new FileInputStream(file), "UTF-8")) {
            while (in.hasNext()) {
                String token = in.next();
                if (token.equals("if") || token.equals("ot")) {
                    count++;
                }
            }
        }
        System.out.println("The word count is " + count);
    }
}

您可以简单地使用 Apache 的 StringUtils 和 FileUtils 来计算您的匹配词,而不是使用文件处理流,如下所示,

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.io.FileUtils

import javax.swing.JFileChooser;

public class FileReader 
{
    public static void main(String[] args) 
    {
        int count = 0;
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        try
        {
            count = StringUtils.countMatches(FileUtils.readFileToString(file),"Search_String or Search_Character");
            count += StringUtils.countMatches(FileUtils.readFileToString(file),"Search_String or Search_Character");
        }
        catch(Exception e)
        {
            System.out.println("Error :" + e);
        }
        System.out.println("The word count is " + count);
    }
}

你也可以这样试试