我编写了一个程序来反转字符串中的单词。 如果i / p是“狗在追逐” 然后o / p应该是“追逐是狗”
public class String_reverse {
public static void main(String[] args) {
String input= "The dog is chasing";
String[] arr= input.split(" ");
String reverse="";
for(int i=arr.length-1;i>=0;i--)
{
reverse+= ((reverse.equals(""))?"":" ")+arr[i];
}
System.out.println(reverse);
}
}
但我不知道如何使用递归来编写这个程序。当我尝试在stackoverflow中搜索时,我可以找到反转字符串;但不能反转字符串中的单词。
答案 0 :(得分:2)
递归方法,使用与linked "duplicate"相同的逻辑,而不使用split()
:
private static String reverseWords(String text) {
int idx = text.indexOf(' ');
return (idx == -1 ? text : reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx));
}
逻辑是:
正如您所看到的,当应用于反转文本(字符)而不是单词时,它的非常类似:
private static String reverseText(String text) {
return (text.length() <= 1 ? text : reverseText(text.substring(1)) + text.charAt(0));
}
对于那些喜欢拼写出来并且不喜欢三元运算符的人来说,这里是长版本,有额外的括号并支持空值:
private static String reverseWords(String text) {
if (text == null) {
return null;
}
int idx = text.indexOf(' ');
if (idx == -1) {
return text;
}
return reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx);
}
private static String reverseText(String text) {
if (text == null || text.length() <= 1) {
return text;
}
return reverseText(text.substring(1)) + text.charAt(0);
}
请注意reverseText()
的长版本与链接副本中的版本完全相同。
答案 1 :(得分:1)
这是一个示例程序,可以递归地执行您想要的操作:
public class ReverseWords {
public static void main(String args[]) {
String s = "This is a test";
reverse(s);
}
private static void reverse(String s) {
if(s == null) return;
String words[] = s.split(" ", 2);
if (words.length < 2) reverse(null);
else reverse(words[1]);
System.out.print(words[0] + " ");
}
}
答案 2 :(得分:1)
Recursive methods在开始时似乎有点难,但尝试执行以下操作:
尽可能简化问题,找出自己不太复杂的案例来解决问题。 (例如,您可以使用带有两个单词的句子。)
首先在纸上进行,使用Pseudocode帮助您用最简单的语言处理问题。
开始编码,不要忘记递归到你的递归。
public static void main(String[] args) {
String s = reverseSentence("This sentence will be reversed - I swear".split(" "));
System.out.println(s);
}
public static String reverseSentence(String[] sentence){
if (sentence.length <= 1){
return sentence[0];
}
String[] newArray = new String[sentence.length-1];
for (int i = 0 ; i < newArray.length ; i++){
newArray[i] = sentence[i];
}
return sentence[sentence.length-1] + " " + reverseSentence(newArray);
}
答案 3 :(得分:1)
您可以参考以下代码。
class ReverseString {
public static void main(String args[]) {
String myString = "The dog is chasing";
reverse(myString);
}
public static String reverse(String myString) {
int space = myString.indexOf(" ");
if (space != -1) {
reverse(myString.substring(space + 1, myString.length()));
}
if (space == -1) {
System.out.println(myString.substring(0, myString.length()));
} else {
System.out.println(myString.substring(0, space));
}
return myString;
}
}