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

Java元音统计函数输入空字符串返回1而非0的原因及优化咨询

空字符串统计元音返回1的问题原因及优化方案

问题原因

当传入空字符串""时,str.split("")会生成一个长度为1的数组,数组里唯一元素是空字符串""。
循环中vowels.contains(chr)判断"aeiou"是否包含空字符串——Java里任何字符串都默认包含空字符串作为子串,所以这个判断返回true。原代码没过滤空字符串,导致answer加1,最终返回1而非0。

更优方案

方案1:直接遍历字符(最简洁高效)

跳过拆分字符串的步骤,直接遍历每个字符判断是否为元音:

public static int getCount(String str) {
    String vowels = "aeiou";
    int answer = 0;
    for (char c : str.toCharArray()) {
        if (vowels.indexOf(c) != -1) {
            answer++;
        }
    }
    return answer;
}

如果用Java 8及以上版本,也可以用Stream简化写法:

public static int getCount(String str) {
    return (int) str.chars()
                    .mapToObj(c -> (char) c)
                    .filter(c -> "aeiou".contains(String.valueOf(c)))
                    .count();
}

方案2:修复原逻辑的判断问题

如果想保留拆分字符串的写法,需要修正几个细节:

  1. 字符串内容相等要用equals(),!=判断的是对象引用而非内容;
  2. 用短路与&&替代&,前面条件不满足时不会执行后面判断,提升效率;
  3. 提前判断空字符串,避免不必要的循环:
public static int getCount(String str) {
    if (str.isEmpty()) {
        return 0;
    }
    String vowels = "aeiou";
    int answer = 0;
    String[] strArray = str.split("");
    for (String chr : strArray) {
        if (vowels.contains(chr) && !chr.isEmpty()) {
            answer++;
        }
    }
    return answer;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:25:24