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

如何修复统计CamelCase单词数函数的边界访问错误?

修复CamelCase单词统计函数的问题

首先,你的函数出现报错的核心原因是当遍历到字符串最后一个字符时,word[i+1]会变成undefined,调用toLowerCase()自然会触发无法读取属性的错误。除此之外,原函数的计数逻辑也存在问题(初始值错误、连续大写时提前终止遍历)。

以下是修复后的完整函数:

function singleWordChecking(word) {
    // 处理空字符串边界
    if (!word) return 0;
    // 非空字符串至少包含1个单词
    let singleWordCount = 1;
    
    for (let i = 1; i < word.length; i++) {
        const currentChar = word[i];
        const prevChar = word[i - 1];
        
        // 当前字符是大写时,判断是否为新单词的起始
        if (currentChar.toUpperCase() === currentChar) {
            // 情况1:前一个字符是小写 → 新单词开头(如HelloWorld中的W)
            if (prevChar.toLowerCase() === prevChar) {
                singleWordCount++;
            } else {
                // 情况2:前一个字符是大写,但下一个字符是小写 → 缩写结束,新单词开始(如IPAddress中的A)
                const nextChar = word[i + 1];
                if (nextChar && nextChar.toLowerCase() === nextChar) {
                    singleWordCount++;
                }
            }
        }
    }
    return singleWordCount;
}

测试验证

console.log(singleWordChecking('HelloWorldWideWeb')); // 输出4
console.log(singleWordChecking('HelloWWW')); // 输出2
console.log(singleWordChecking('IPAddress')); // 输出2
console.log(singleWordChecking('ID')); // 输出1

关键修复点说明

  1. 边界处理:
    • 增加空字符串判断,避免无意义计算。
    • 访问word[i+1]前先判断该索引是否存在(nextChar && ...),防止读取undefined的属性。
  2. 计数逻辑修正:
    • 初始计数设为1,因为任何非空的CamelCase命名至少包含1个单词。
    • 移除原函数中遇到连续大写就直接return的错误逻辑,改为判断连续大写后是否跟随小写字符(以此区分缩写和新单词的边界)。
  3. 遍历逻辑优化:
    • 从索引1开始遍历(跳过第一个字符,因为它是第一个单词的起始),通过对比当前字符与前/后字符的大小写,准确识别新单词的分隔点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:45:24