使用字符数组反转字符串

时间:2018-05-01 14:01:24

标签: java arrays char

我知道如何反转字符串,但我只是尝试使用字符数组的另一种方法。告诉我为什么输出错误? a有String

char[] c = a.toCharArray();
int j = c.length;
char c2[] = c;
for(int i = 0; i < j; i++){
    c2[i] = c[j - i - 1];
}
System.out.println(c2);

喜欢给哈罗德提供输出dloold

5 个答案:

答案 0 :(得分:2)

没有必要使用两个数组,当你做一个引用副本时,你最终还是会在同一个数组上工作。

请记住使用空数组,null,具有偶数长度和奇数长度的数组来测试算法。

这是一个包含简单测试打印的单一阵列解决方案。

public class ReverseTest {
    public static String reverse(String s) {
        if (s == null)
            return null;
        char[] ca = s.toCharArray();
        for (int i = 0; i < ca.length/2; i++) {
            int j = ca.length-i-1;
            char c = ca[i];
            ca[i] = ca[j];
            ca[j] = c; 
        }
        return String.valueOf(ca);
    }

    public static void main(String[] args) {
        System.out.println(reverse(null));
        System.out.println(reverse(""));
        System.out.println(reverse("54321"));
        System.out.println(reverse("4321"));
    }
}

打印:

empty line

12345

1234

答案 1 :(得分:2)

您正在读写同一个数组。这样:

char c2[]=c;

不正确

你想:

   char c2[]= new char[c.length];

答案 2 :(得分:0)

这是一个参考问题。

char c2[]=c;

这不会复制数组,只会复制它的引用。所以c2和c是相同的数组。在你的循环中,你用最后一个字符覆盖第一个字符。最简单的解决方案是使用:

char c2[]= new char[j];

所以你有两个数组,没有参考问题。

另外,您可以在原地交换数组。循环直到一半并交换第一和第二半的元素。

答案 3 :(得分:0)

您的作业char c2[]=c;会将c的引用分配给c2。您应该使用c创建长度相同的数组。

所以你应该写;

char c2[] = new char[j];

char c2[] = a. toCharArray()

在内存中创建带差异引用的数组。

答案 4 :(得分:0)

正如其他答案所提到的,你必须在数组中途停止。

我想补充一点,Java有StringBuilder.reverse()方法,它也可以在字符数组上运行。以下内容改编自官方源代码:

private static String reverse(String s) {
    char[] chars = s.toCharArray();
    int length = s.length();
    for (int j = (length-1) / 2; j >= 0; j--) {
        int k = length - j - 1;
        char cj = chars[j];
        char ck = chars[k];
        chars[j] = ck;
        chars[k] = cj;
    }
    return new String(chars);
}