java - 为什么我会得到这个结果?反转字符串的简单循环

标签 java string

我很困惑。逻辑是合理的,但最后我得到了这个奇怪的中间镜像字符串。

public static void main(String[] args) {
    String x = "Hello";
    char str[] = x.toCharArray();
    char done[] = str;
    int doneMarker = 0;
    System.out.println("str.length is: " + str.length);
    for (int i= str.length-1; i>(-1); i--)
    {
        done[doneMarker] = str[i];
        doneMarker++;
        System.out.println("i = " + i);
        System.out.println("doneMarker = " + doneMarker);
    }

    String reversed = new String(done);
    System.out.println(reversed);
}

最佳答案

当你这样做时:

char done[] = str;

您将 done 指向 str,因此您开始更改原始 char 数组。

旁注:

for (int i= str.length-1; i>(-1); i--)

通常写成

for (int i=str.length-1; i>=0; i--)

此外,您不需要第二个计数器。
您可以大大简化整个事情。

public static void main(String[] args) {
    String x = "Hello";
    char str[] = x.toCharArray();
    char done[] = new char[str.length];
    System.out.println("str.length is: " + str.length);
    for (int i=str.length-1; i>=0; i--)
    {
        done[i] = str[str.length - 1 - i];
        System.out.println("i = " + i);
    }
    String reversed = new String(done);
    System.out.println(reversed);
}

关于java - 为什么我会得到这个结果?反转字符串的简单循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947290/

相关文章:

从数据框 R 列中删除 NA

java - Java中多维数组的Split()方法

java - [var =modify(var)] 是一种不好的做法吗?

java - Android 10 (Q) ACCESS_BACKGROUND_LOCATION 权限

r - 识别并替换公式中的参数,例如 R 中的字符串

c - 无法使用 strcmp 比较两个字符串并使用 strlwr 降低

java - Android MQTT - Paho 不支持 wss ://

java - 如何设置java.util.Timer的优先级

php - 在字符串中查找第一个大写字符的最快方法

r - 将字符串分成两列