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
相关产品推荐
相关产品推荐

