JTextArea为空时单词计数代码返回错误结果的问题求助
问题原因
String.split("\\s")的默认行为导致了该问题:当输入字符串为空时,split方法会返回包含1个空字符串元素的数组,因此你拿到的长度永远是1。- 除此之外你的原有写法还存在其他统计误差:文本首尾存在空格、多个连续空格分隔单词的场景下,也会统计到无效的空字符串元素,导致计数偏大。
修复后的代码
private void convertButton1MouseClicked(java.awt.event.MouseEvent evt) { String text = inputField.getText(); // 先去除文本首尾的所有空白字符 String trimmedText = text.trim(); int wordCount = 0; // 仅当去空后文本不为空时才统计单词数 if (!trimmedText.isEmpty()) { // 用1个或多个连续空白符作为分隔规则,避免连续空格产生无效空元素 wordCount = trimmedText.split("\\s+").length; } numberOfWords.setText(String.valueOf(wordCount)); }
修改逻辑说明
- 新增
trim()处理:过滤文本首尾的空格、换行、制表符等空白字符,覆盖全空白输入的场景 - 新增空值判断:去空后文本为空时直接返回计数0,解决空文本统计为1的问题
- 分隔规则从
\\s改为\\s+:匹配连续的空白字符,避免多个空格分隔单词时产生多余空元素,统计更准确
内容的提问来源于stack exchange,提问作者Tito Dave
相关产品推荐
相关产品推荐

