以下统计字符串中字符出现次数的Java代码实现是否正确?
你的代码实现是错误的,我们来分析问题并修正
这个实现的核心逻辑完全不成立,根本无法正确统计字符'i'的出现次数,下面拆解问题所在:
问题点分析
- 统计逻辑完全错误:你试图通过拼接带空格的匹配字符,再取trim后字符串的长度来计数,这是完全错误的思路。比如当输入中有2个'i'时,你的代码最终输出的
newResult.length()会是1(此时newResult为"i"),但实际次数是2,结果完全不符。 - 变量赋值顺序颠倒:每次匹配到'i'时,你先将
result.trim()赋值给newResult,再更新result,这导致newResult永远落后一次匹配,无法正确统计最后一次的匹配结果。 - 冗余且易出错的字符串操作:把单个字符转成带空格的字符串再trim,属于完全多余的操作,既降低代码效率,又容易引入不必要的bug。
正确的实现方式
这里提供几种简洁可靠的写法,你可以根据场景选择:
方法1:基础遍历计数(最直观)
直接遍历字符串的每个字符,匹配到目标字符就递增计数器:
// program to find number of occurrences of "i" in string public class NumberOfChar { public static void main(String args[]) { String input = "this is String"; char target = 'i'; // 用char类型更直接,避免字符串比较的开销 int count = 0; for (int i = 0; i < input.length(); i++) { if (input.charAt(i) == target) { count++; } } System.out.println("Number of occurrences: " + count); } }
方法2:Java 8流操作(简洁优雅)
利用Java 8的Stream API实现一行式计数:
// program to find number of occurrences of "i" in string public class NumberOfChar { public static void main(String args[]) { String input = "this is String"; char target = 'i'; long count = input.chars() .filter(c -> c == target) .count(); System.out.println("Number of occurrences: " + count); } }
方法3:替换法(代码量最少)
将所有非目标字符替换为空,剩余字符串的长度就是目标字符的次数:
// program to find number of occurrences of "i" in string public class NumberOfChar { public static void main(String args[]) { String input = "this is String"; String target = "i"; int count = input.replaceAll("[^" + target + "]", "").length(); System.out.println("Number of occurrences: " + count); } }
内容的提问来源于stack exchange,提问作者Mangesh Patil
相关产品推荐
相关产品推荐

