在Java中使用递归反转字符串[保留]

问题描述 投票:-2回答:4

我想反转整个String。例如,“猫正在运行”应提供输出“猫正在运行”。

我已经尝试了很多,但是我做不到。它显示“ gninnur si taC”。请帮助我,应该将“ cat”作为单个字符,而不是将“ c”作为单个字符。

这里是代码:

public static void main(String[] args) {
    String str = "Cat is running";
    System.out.println("Before recursion: " + str);
    System.out.println("After recursion: " + reverse(str));
}

public static String reverse(String str) {
    if(str.isEmpty())
        return str;

    String s = "";
    for(int i = 0; i < str.length(); i++) {
        s = s + str.charAt(i);
    }
    return reverse(s.substring(1)) + s.charAt(0);   
}
java recursion substring reverse
4个回答
3
投票

您必须在String中找到第一个单词,将String的其余部分传递给递归调用,并在最后添加第一个单词:

public static String reverse(String str) {
    if(str.isEmpty() || !str.contains(" "))
        return str;

    int sep = str.indexOf(' ');
    return reverse(str.substring(sep+1)) + " " + str.substring(0,sep);   
}

输出:

Before recursion: Cat is running
After recursion: running is Cat

BTW,循环是您的原始代码是没有意义的。您可以直接使用str而不是创建它的副本。

您可以使用以下方法使其更短:

public static String reverse(String str) {
    int sep = str.indexOf(' ');
    return sep >= 0 ? reverse(str.substring(sep+1)) + " " + str.substring(0,sep) : str;
}

1
投票

我想我做的要比@Eran好一点,但我已经写过:

private static String reverse(String str) {
    if (str.isEmpty() || !str.contains(" "))
        return str;
    StringBuilder sb = new StringBuilder(" ");
    int i = 0;
    while (i < str.length() && str.charAt(i) != ' ') {
        sb.append(str.charAt(i));
        i++;
    }
    return reverse(str.substring(i + 1)) + sb.toString();
}

0
投票

这里是另一个选项(未试用):

public static String reverse(String str) {
  String words[] = str.split (" ");
  StringBuilder sb = new StringBuilder();
  j = words.length - 1;
  while (j >= 0) {
    sb.append(" " + words[j--]);
  }
  return sb.toString();
}

0
投票

您也可以这样反转孔段公开课测试{

public static void main(String[] args) {
    String s = "java is programming language";
    System.out.println("before"+s);
    System.out.println("after"+reverse(s));

}
public static String reverse(String str) {
    if(!str.isEmpty()) {
        StringBuffer s1 = new StringBuffer();
        String [] words = str.toString().split(" ");
        for(int i=words.length-1;i>=0;i--) {
            if(i != 0) {
                s1.append(words[i]+" ");
            }else {
                s1.append(words[i]);
            }

        }
        return s1.toString();
    }

    return str;
}

}

© www.soinside.com 2019 - 2024. All rights reserved.