Java实现小写字母逆序替换功能运行仅输出空白无报错问题
问题原因
- 核心错误是字符串比较使用了
==运算符:Java中String属于引用类型,==对比的是两个字符串对象的内存地址,不是实际存储的文本内容。你代码中alphabet[j] == arrayX[i]、arrayX[i] == alphabet[j].toUpperCase()两个判断几乎永远返回false,既匹配不到小写字母,大写字母也不会正常加入结果集,最终返回空字符串。 - 缺少非字母字符的处理逻辑:现有代码仅在匹配到小写/大写字母时才会往结果集写入内容,数字、特殊符号、空格等字符会被直接丢弃。
- 大写字母匹配逻辑缺少
break语句,匹配成功后仍会执行剩余的循环遍历,存在无效性能损耗。 - 使用
split("")拆分字符串的方式兼容性差,Java 8之前的版本会生成空的首元素,也可能导致结果异常。
修复方案
推荐直接操作字符数组实现逻辑,更高效也更易维护,修复后代码如下:
public class Solution { public static String solution(String x) { char[] charArray = x.toCharArray(); for (int i = 0; i < charArray.length; i++) { char c = charArray[i]; // 仅处理小写字母 if (c >= 'a' && c <= 'z') { // a-z互换的规则等价于:替换后的字符 = 'a' + 'z' - 原始字符 charArray[i] = (char) ('a' + 'z' - c); } // 大写字母、特殊字符直接保留,无需处理 } return new String(charArray); } public static void main(String[] args) { // 测试用例:输入abcXYZ123,预期输出zyxXYZ123 System.out.println(solution("abcXYZ123")); } }
如果要保留你原有数组匹配的实现思路,只需要把==替换为equals()方法、补充非字母字符的处理逻辑、添加对应的break即可。
内容的提问来源于stack exchange,提问作者Kasizah
相关产品推荐
相关产品推荐

