Java字符数组大小写互换问题:循环冗余输出求助
解决字符匹配大小写互换时的冗余输出问题
你的代码之所以会输出大量重复字符,核心问题是嵌套循环逻辑完全错误:外层遍历myArray的每个字符时,内层又遍历了argArray的所有元素,导致myArray里的每个字符被重复添加了argArray.length次,这显然和你只需要处理一次的需求不符。
修正思路
- 先把
arg对应的字符数组转成字符集合,这样可以快速判断某个字符是否需要处理,避免嵌套循环的重复操作 - 遍历
myStr的每个字符,对每个字符仅做一次判断:- 如果该字符存在于
arg的字符集合中,执行大小写互换 - 不存在则直接保留原字符
- 如果该字符存在于
- 用
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
相关产品推荐
相关产品推荐

