Java反转字符串代码中toCharArray()返回垃圾值是什么原因?
代码问题排查及修复方案
存在的问题
- while循环未对索引i自增:弹出栈元素覆盖字符数组的逻辑中没有对变量i执行递增操作,所有弹出的元素都会被赋值到
ch[0]的位置,数组其他位置元素没有被正确修改,逻辑完全错误。 - 字符数组转字符串方式错误:Java中数组的
toString()方法继承自Object类,返回的是数组对象的内存地址字符串,不是数组内容拼接的字符串,这就是你看到垃圾值的核心原因。 - 边界校验缺失:没有判断k是否大于输入字符串的长度,如果入参k比s的长度大,遍历压栈的循环会直接抛出数组越界异常。
- Stack初始化泛型未对齐:声明Stack时指定了泛型为
Character,但实例化时没有加泛型diamond运算符,存在类型隐式转换的隐患。
修复后的代码
class Solution{ public String reverseStr(String s, int k){ // 增加边界校验,k最大取字符串长度避免越界 k = Math.min(k, s.length()); char[] ch = s.toCharArray(); Stack<Character> st = new Stack<>(); int i; for(i = 0; i < k; i++){ st.push(ch[i]); } i = 0; while(!st.isEmpty()){ ch[i] = st.pop(); // 新增索引自增,逐个位置赋值 i++; } // 用new String()将字符数组转为字符串,不要调用数组的toString() return new String(ch); } }
内容的提问来源于stack exchange,提问作者Siddharth Ittan
相关产品推荐
相关产品推荐

