如何在已用Character方法统计字母数字后统计字符串单词数及特殊字符
问题修正与代码实现
原代码问题分析
- 特殊字符统计逻辑错误:原代码公式颠倒且无意义,
str.length()不可能小于0,正确逻辑应为特殊字符数 = 总字符数 - 字母数 - 数字数 - 单词数统计未实现:
split("\\s++")未接收返回值,且未处理空格边界、连续空格等情况 - 冗余代码:循环内重复执行
split无意义,无用的Iterator导入,变量命名不清晰
修正后完整代码
package Shak; import java.util.Scanner; public class Lesson { // 修正类名拼写错误 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); int alphabets = 0; int numbers = 0; int specialChars = 0; int words = 0; // 统计字母、数字、特殊字符 for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (Character.isLetter(c)) { alphabets++; } else if (Character.isDigit(c)) { numbers++; } else { specialChars++; } } // 统计单词数:处理开头/结尾空格、连续空格情况 boolean inWord = false; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (!Character.isWhitespace(c)) { if (!inWord) { words++; inWord = true; } } else { inWord = false; } } // 输出结果 System.out.println("总字符数:" + str.length()); System.out.println("字母数:" + alphabets); System.out.println("数字数:" + numbers); System.out.println("特殊字符数:" + specialChars); System.out.println("单词数:" + words); } }
关键逻辑说明
- 特殊字符统计:遍历每个字符,直接将非字母、非数字的字符归类为特殊字符,无需复杂计算,直观准确。
- 单词数统计:
- 通过
inWord标记跟踪是否处于单词中,遇到非空格字符且未在单词内时,单词数加1并标记进入单词;遇到空格时标记退出单词。 - 该方法能完美处理开头/结尾空格、连续多个空格的场景,避免正则分割的空字符串问题。
- 通过
测试示例
输入:Hello World! 123
输出:
总字符数:14 字母数:10 数字数:3 特殊字符数:1 单词数:2
输入: Java is fun!!!
输出:
总字符数:16 字母数:9 数字数:0 特殊字符数:7 单词数:3
内容的提问来源于stack exchange,提问作者gone4-1000
相关产品推荐
相关产品推荐

