问题描述
所以我必须反转一个字符串,但是像一个例子一样,就是反转Hello World。好吧,我的代码像dlroW olleH一样将其反转,而您必须像World Hello一样反转它。这是我下面的代码,有人可以帮助我修复它,或者告诉我我做错了什么。创建新对象并通过该对象输入数据,然后调用该方法时,我需要这样做。
public class reverseMe {
public String reverseMe(String s) {
if(s.length() == 0)
return "";
return s.charat(s.length() - 1) + reverseMe(s.substring(0,s.length()-1));
}
}
解决方法
“没有反向功能或循环”是什么意思。首先,在Java中,方法被称为方法,而不是函数;其次,您需要以某种方式迭代字符串。这段代码仅使用递归方法完成工作。从构造函数调用它,就完成了。还没有内置的Java方法可以执行您想要的操作。
public class HelloWorld{
public String recursiveReverse(String[] words,StringBuilder b,int length){
if (length < 0)
return b.toString();
else{
b.append(words[length] + " ");
length--;
return recursiveReverse(words,b,length);
}
}
public String reverse (String input){
String[] words = input.split(" ");
StringBuilder reverse = new StringBuilder();
return recursiveReverse(words,reverse,words.length-1);
}
public static void main(String []args){
HelloWorld a = new HelloWorld();
System.out.println(a.reverse("hello this is a test reverse this string"));
}
}
输出:
string this reverse test a is this hello
,
此答案假定以下条件:
-
不能使用内置的
reverse()
功能,例如在StringBuilder
和Collections
上找到的功能。 -
不能使用循环。
-
输入可以包含任意数量的单词。
-
单词之间用一个空格隔开。
首先,最简单的解决方案是输入split()
,然后使用Stream逻辑以相反的顺序组合单词,但是我认为Stream逻辑是“ Loop逻辑”,所以不会这样做。
这将使用递归方法作为解决方案,类似于问题中的尝试:
static String reverseWords(String input) {
int idx = input.indexOf(' ');
if (idx == -1)
return input;
return reverseWords(input.substring(idx + 1)) + ' ' + input.substring(0,idx);
}
测试
System.out.println(reverseWords("Hello World"));
System.out.println(reverseWords("The quick brown fox jumps over the lazy dog"));
输出
World Hello
dog lazy the over jumps fox brown quick The
,
我们可以使用代码,但是我们可以将其用于循环而不是CharAt。我的方法确实需要java.util.Arrays;
才能获取给定数组的子集。请注意,您必须执行reverseMe(str.split(" "))
才能运行它。
import java.util.Arrays;
public class reverseMe {
public String reverseMe(String[] s) {
if(s.length == 0)
return "";
return s[s.length - 1] + " " + reverseMe(Arrays.copyOfRange(s,s.length-1));
}
}
输入:“ Hello Newer World”
输出:“世界较新的问候”
,由于不能使用任何循环或反向方法,因此将留下递归方法。 但是,这不是很有效。
它的工作原理是:在字符串上反复拆分,减去前一个字符串的最后一个单词,然后以相反的顺序返回新的字符串。
ReverseMe r = new ReverseMe();
String reversed =r.reverseMe("This is a test of reversing a string");
System.out.println(reversed);
public String reverseMe(String s) {
String arr[] = s.split("\\s+");
if (arr.length > 1) {
return arr[arr.length-1] + " " + reverseMe(s.substring(0,s.lastIndexOf(" ")));
}
return arr[arr.length-1];
}
打印
string a reversing of test a is This