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

时间:2016-02-25 01:00:29

标签: java substring java.util.scanner 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);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

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

现在,您需要打开文件进行阅读。在Java中,您使用FileInputStream执行此操作。您可以将它传递给类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);
    }
}

答案 1 :(得分:0)

不是使用文件处理流,而是使用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);
    }
}

您也可以尝试这样做。