首页 > 解决方案 > 在 Java 中使用递归将字符串转换为反向字符串

问题描述

今天我试图将字符串转换为e.g(Cat Is Running into Running Is Cat)逐字反转字符串而不是字符

public class ReverseString_ {
    public static void reverse(String str) {
        String[] a = str.split(" ");
        for (int i = a.length - 1; i >= 0; i--) {
            System.out.println(a[i] + " ");
        }
    }

    public static void main(String[] args) {
        reverse("Cat Is Running");
    }
}

显示以下输出:

Running Is Cat BUILD SUCCESSFUL (total time: 0 seconds)

我正在尝试将字符串转换为与上面相同的反向字符串,但通过递归方法,但它似乎太混乱了。并显示更多错误。有人可以帮我理解它。非常感谢

public static String reverse_recursion(String str) {
    if (str == null)
        return null;
    else {
        String Arry[] = str.split(" ");
        int n = Arry.length - 1;
        System.out.println(Arry[n] + "");
        return reverse_recursion(Arry[n - 1]);
    }
}

public static void main(String[] args) {
    reverse_recursion("Cat Is Running");
}

此代码显示以下输出:

Running
Is
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

这段代码为什么不打印(0) index?有人可以帮我解决这个错误吗

标签: javastringrecursionnetbeansreverse

解决方案


这应该有效:

public static String reverse(String s) {
    int idx = s.indexOf(" ");
    if (idx < 0) {
        // no space char found, thus, s is just a single word, so return just s itself
        return s;
    } else {
        // return at first the recursively reversed rest, followed by a space char and the first extracted word
        return reverse(s.substring(idx + 1)) + " " + s.substring(0, idx);
    }
}

public static void main(String[] args) {
    System.out.println(reverse("Cat Is Running"));
}

推荐阅读