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

如何在JTextArea中统计字符串各字符出现次数并打印输出

问题排查与修复方案

现有代码的核心问题

  • 计数数组未实际赋值:你声明了counted数组存储字符出现次数,但全程没有给数组元素赋值,输出的永远是初始值0
  • 输出内容被反复覆盖:你在内层循环中每次都调用setText(),该方法会直接清空文本框原有内容,最终只能保留最后一次循环设置的内容
  • 统计逻辑冗余错误:双重循环+额外的cat字符数组、find变量完全没有必要,统计逻辑混乱,没有先完成全量统计再输出

修正后的代码

btnStat.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
        String text = textbox1.getText();
        // 建议MAX_CHAR定义为65536,覆盖所有Unicode字符,适配中文等非ASCII字符统计
        int counted[] = new int[MAX_CHAR];
        int length = text.length();
        
        // 第一步:遍历所有字符完成次数统计
        for (int i = 0; i < length; i++) {
            char currentChar = text.charAt(i);
            counted[currentChar]++;
        }
        
        // 第二步:拼接统计结果,避免重复输出相同字符
        StringBuilder resultBuilder = new StringBuilder("Character Frequency: \n");
        boolean[] alreadyOutput = new boolean[MAX_CHAR];
        for (int i = 0; i < length; i++) {
            char currentChar = text.charAt(i);
            if (!alreadyOutput[currentChar]) {
                resultBuilder.append("'").append(currentChar).append("' - ").append(counted[currentChar]).append(" ,\n");
                alreadyOutput[currentChar] = true;
            }
        }
        
        // 第三步:一次性将完整结果写入目标文本框
        textbox6.setText(resultBuilder.toString());
    }
});

额外优化建议

  • 如果文本框展示时换行失效,确认textbox6已经开启多行展示属性
  • 如果需要忽略大小写、过滤空格/特殊字符,可在统计步骤增加对应的判断逻辑
  • 如果只需要统计ASCII字符,MAX_CHAR设置为256即可,需要统计全字符则设置为65536

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:54:01