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

Java中使用char[]数组反转字符串出错的问题排查

为什么用char[]自身赋值反转字符串会出错?

当尝试用char数组自身赋值反转字符串时,输入'geeks'得到的结果是'skeks',而非预期的'skeeg';但将赋值语句改为reverseword[j] = test.charAt(i)就能得到正确结果。相关代码如下:

class reverse {
    public static String sample(String str) {
        String test = str;
        char[] reverseword;

        reverseword = test.toCharArray();

        int j = 0;
        
        for (int i = reverseword.length - 1; i >= 0; i--) {
            reverseword[j] = reverseword[i];
            j++;
        }

        String finalresult = new String(reverseword);
        return finalresult;
    }
} 

问题原因

核心问题是你在同一个char数组上同时进行读和覆盖写操作,前面的赋值会修改数组中的原始字符,导致后续循环读取到的不是最初的字符串内容。

拿输入'geeks'为例,初始char数组是['g','e','e','k','s'],循环执行过程如下:

  • i=4(对应字符's'),j=0:将reverseword[0]改为's',数组变为['s','e','e','k','s']
  • i=3(对应字符'k'),j=1:将reverseword[1]改为'k',数组变为['s','k','e','k','s']
  • i=2(对应字符'e'),j=2:将reverseword[2]改为'e',数组无变化
  • i=1(此时数组中reverseword[1]已经是'k',而非原始的'e'),j=3:将reverseword[3]改为'k',数组无变化
  • i=0(此时数组中reverseword[0]已经是's',而非原始的'g'),j=4:将reverseword[4]改为's',数组无变化

最终数组内容是['s','k','e','k','s'],所以得到结果'skeks'。

而使用test.charAt(i)时,test是原始字符串,始终读取的是最初的字符,不会被数组的修改操作影响,因此能正确反转。

正确解决方法

方法1:创建新的char数组存储结果

避免在原数组上覆盖,直接用新数组保存反转后的字符:

class reverse {
    public static String sample(String str) {
        char[] reverseword = new char[str.length()];
        int j = 0;
        for (int i = str.length() - 1; i >= 0; i--) {
            reverseword[j] = str.charAt(i);
            j++;
        }
        return new String(reverseword);
    }
}

方法2:双指针交换两端字符

在同一个数组上操作,但通过交换两端字符的方式,不会覆盖未读取的原始内容:

class reverse {
    public static String sample(String str) {
        char[] reverseword = str.toCharArray();
        int left = 0;
        int right = reverseword.length - 1;
        while (left < right) {
            // 交换左右指针指向的字符
            char temp = reverseword[left];
            reverseword[left] = reverseword[right];
            reverseword[right] = temp;
            left++;
            right--;
        }
        return new String(reverseword);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:07:28