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

JavaScript字符统计求助:重复字母、非空白及全字符计数失败

文本统计功能修正方案

先看修正后的完整代码,直接替换你原有的代码即可实现三个需求:

<body>
    <p>
        <textarea id="textBubble" style="height: 500px;"></textarea>
    </p>
    <p>
        <span id="totalCharCount">0</span> 总字符数(含空白)
    </p>
    <p>
        <span id="nonWhiteCharCount">0</span> 非空白字符数
    </p>
    <p>
        <span id="duplicateCharCount">0</span> 重复字母数量
    </p>
    <button type="button" onclick="calculateStats()">统计!</button>
    <script>
        const textBubble = document.getElementById("textBubble");
        const totalCharCount = document.getElementById("totalCharCount");
        const nonWhiteCharCount = document.getElementById("nonWhiteCharCount");
        const duplicateCharCount = document.getElementById("duplicateCharCount");

        // 实时统计(可选,也可以只通过按钮触发)
        textBubble.addEventListener("keyup", calculateStats);

        function calculateStats() {
            const text = textBubble.value;
            
            // 1. 统计包含空白的所有字符数量
            totalCharCount.innerText = text.length;

            // 2. 统计非空白字符数量(过滤所有空白字符:空格、制表符、换行等)
            const nonWhiteChars = text.split('').filter(char => !/\s/.test(char));
            nonWhiteCharCount.innerText = nonWhiteChars.length;

            // 3. 统计重复字母数量(不区分大小写,只统计出现≥2次的字母)
            duplicateCharCount.innerText = getDuplicateCount(text);
        }

        function getDuplicateCount(text) {
            const charMap = {};
            // 统一转小写,不区分大小写统计
            const lowerText = text.toLowerCase();
            
            // 遍历每个字符,记录出现次数
            for (const char of lowerText) {
                // 只统计字母,忽略数字、符号、空白
                if (/[a-z]/.test(char)) {
                    charMap[char] = (charMap[char] || 0) + 1;
                }
            }

            // 统计出现次数≥2的字母数量
            let count = 0;
            for (const char in charMap) {
                if (charMap[char] > 1) {
                    count++;
                }
            }
            return count;
        }
    </script>
</body>

关键修正点说明

  • 元素选择错误:你原代码里var nonWhite = document.getElementById("textBubble")选错了元素,应该对应显示统计结果的span,现在重新命名了ID,让功能对应更清晰。
  • 全字符计数:直接用text.length就能拿到总字符数(包括空格、换行等),不用拆分字符串,简单高效。
  • 非空白字符计数:原代码里characters变量未定义,现在用text.split('')拆分所有字符,再用正则/\s/过滤掉所有空白类字符(包括空格、制表符、换行)。
  • 重复字母统计:原函数存在多个错误:
    • 未初始化count变量,会导致报错;
    • i = i.toLowerCase()里的i未定义;
    • 只给字符赋值1,没有累加出现次数;
    • 现在修正为:先把文本转小写,只统计字母,用对象记录每个字母的出现次数,最后统计出现次数≥2的字母数量。

使用说明

  • 可以实时输入时自动统计(keyup事件),也可以点击按钮触发统计;
  • 重复字母统计忽略大小写(比如A和a算同一个),且只统计字母,不会把数字、符号、空白算进去;
  • 非空白字符统计会过滤所有空白类字符,不止空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:55:39