【问题标题】:I need to count the number of times a substring occurs in a file using scanner and JFIleChooser我需要使用扫描仪和 JFIleChooser 计算文件中子字符串出现的次数
【发布时间】:2016-02-25 01:00:29
【问题描述】:

我正在尝试学习 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);
        }
    }
}

【问题讨论】:

  • 我是 stackover 流的新手,我如何发布代码以使其不会全部混乱?
  • 首行缩进 4 个空格,需要换行时使用 shift+enter。
  • 哦,天哪,哈哈,我以前从未使用过这个,但它不起作用。我直接从eclipse复制它。我将第一行缩进了 4 个空格
  • 您可以编辑您的问题。请按照@TheHeadRush 的描述将代码添加到问题中。
  • 需要进入你的主要帖子,而不是评论。

标签: java substring java.util.scanner jfilechooser


【解决方案1】:

您需要做的第一件事是实际显示打开的对话框。您可以使用方法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);
    }
}

【讨论】:

  • UTF-8 是文件的字符编码。处理文件时应始终指定字符编码。这不仅限于Java。还有许多其他字符编码。如果您使用错误的方式读取或写入文件,您可能会在程序中的文件中出现损坏的文本。我使用了 UTF-8,因为它几乎是标准的文件编码。但是,您应该始终确保使用正确的编码。
  • 如果这个答案有帮助,您可以接受并点赞。
  • 哦,好的。好吧,再次感谢男人!我将在这里花费相当多的时间
  • 我试图投票,但它说需要 15 声望?
  • 不客气……啊,没错。您可以在 StackOverflow 上做各种事情来赢得声誉。在您获得特定数量的声誉后,您将获得更多特权。如果您还没有这样做,您可能有兴趣visit the tour
【解决方案2】:

您可以简单地使用 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);
    }
}

你也可以这样试试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2014-07-01
    • 1970-01-01
    • 2019-08-23
    • 2020-02-21
    • 2012-02-12
    相关资源
    最近更新 更多