You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java GUI程序中如何统计TextArea内的单词数量

解决方案

嘿,我明白你想要实现的效果——打开文本文件后,把TextArea里的内容替换成「文件名+单词统计结果」的格式。咱们来一步步修改你的代码,同时顺便优化一下资源处理的规范~

首先,你需要在读取文件内容后添加单词统计逻辑,然后把统计结果替换到TextArea中。另外,原来的文件流处理可以用Java的try-with-resources语法,这样不用手动关闭流,更安全不易出错。

修改后的完整代码如下:

Action Open = new AbstractAction("Open File") {
    @Override
    public void actionPerformed(ActionEvent e) {
        if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
            openFile(fc.getSelectedFile().getAbsolutePath());
        }
    }
};

public void openFile(String fileName) {
    // 用try-with-resources自动关闭FileReader,避免资源泄漏
    try (FileReader fr = new FileReader(fileName)) {
        // 先把文件内容读到TextArea
        textArea.read(fr, null);
        
        // 1. 获取TextArea中的文本内容
        String content = textArea.getText();
        // 2. 统计单词数:按空白字符分割,过滤空字符串(处理连续空格/换行的情况)
        String[] wordArray = content.split("\\s+");
        int wordCount = 0;
        for (String word : wordArray) {
            if (!word.trim().isEmpty()) {
                wordCount++;
            }
        }
        // 如果你用Java 8+,可以用更简洁的流式写法:
        // int wordCount = (int) Arrays.stream(wordArray).filter(w -> !w.trim().isEmpty()).count();
        
        // 3. 替换TextArea的内容为统计结果
        String resultText = fileName + " has " + wordCount + " number of words";
        textArea.setText(resultText);
        
        setTitle(fileName);
    } catch (IOException e) {
        e.printStackTrace();
        // 可以在这里加个友好提示,比如弹出对话框告诉用户文件打开失败
        JOptionPane.showMessageDialog(null, "Failed to open file: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
    }
}

关键说明:

  • 单词统计逻辑:用\\s+匹配任意数量的空白字符(空格、换行、制表符等)来分割文本,然后过滤掉分割后可能出现的空字符串(比如文本开头/结尾的空白),确保统计准确。
  • try-with-resources:把FileReader放在try()括号里,Java会自动帮你关闭流,不用手动写fr.close(),避免了因为异常导致流没关闭的问题。
  • 结果替换:用textArea.setText()直接覆盖原来的文本内容,换成你想要的格式。

如果你的单词定义需要更严谨(比如排除标点符号,比如hello,算一个单词),可以调整分割的正则表达式,比如用\\W+(匹配非单词字符)来分割:

String[] wordArray = content.split("\\W+");

这样会把标点符号作为分隔符,统计出来的单词更符合日常认知~

内容的提问来源于stack exchange,提问作者Peter Djon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:45:16