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

Java字符数组大小写互换问题:循环冗余输出求助

解决字符匹配大小写互换时的冗余输出问题

你的代码之所以会输出大量重复字符,核心问题是嵌套循环逻辑完全错误:外层遍历myArray的每个字符时,内层又遍历了argArray的所有元素,导致myArray里的每个字符被重复添加了argArray.length次,这显然和你只需要处理一次的需求不符。

修正思路

  1. 先把arg对应的字符数组转成字符集合,这样可以快速判断某个字符是否需要处理,避免嵌套循环的重复操作
  2. 遍历myStr的每个字符,对每个字符仅做一次判断:
    • 如果该字符存在于arg的字符集合中,执行大小写互换
    • 不存在则直接保留原字符
  3. 用StringBuilder拼接结果,比直接用String +=更高效(String是不可变对象,频繁拼接会产生大量临时对象)

修正后的代码

import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Main ob = new Main();
        ob.reverse("bcdxyz@3210.");
    }

    public String reverse(String arg) {
        StringBuilder reverseCap = new StringBuilder();
        String myStr = "abc, XYZ; 123.";
        // 将arg的字符存入集合,方便快速查找
        Set<Character> argChars = new HashSet<>();
        for (char c : arg.toCharArray()) {
            argChars.add(c);
        }

        for (char c : myStr.toCharArray()) {
            if (argChars.contains(c)) {
                // 匹配到则互换大小写
                if (Character.isLowerCase(c)) {
                    reverseCap.append(Character.toUpperCase(c));
                } else {
                    reverseCap.append(Character.toLowerCase(c));
                }
            } else {
                // 未匹配到则直接保留原字符
                reverseCap.append(c);
            }
        }
        String result = reverseCap.toString();
        System.out.println(result);
        return result;
    }
}

输出结果

运行后会输出目标字符串:aBC, xyz, 123.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:40:38