[英]Reversing a String Without Reverse Function or loops
所以我必须反转一个字符串,但就像一个例子将反转 Hello World。 好吧,我的代码像这样 dlroW olleH 反转它,你必须像 World Hello 一样反转它。 这是我下面的代码,有人可以帮我修复它或告诉我我做错了什么吗? 我需要像你一样新建一个object,通过object输入数据,然后调用方法。
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));
}
}
“没有反向 function 或循环”是什么意思? 首先,在 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"));
}
}
Output:
string this reverse test a is this hello
这个答案假设如下:
不能使用内置的reverse()
function,例如在StringBuilder
和Collections
上找到的。
不能使用循环。
输入可以包含任意数量的单词。
单词由一个空格分隔。
首先,最简单的解决方案是对输入进行split()
,然后使用 Stream 逻辑以相反的顺序组合单词,但我认为 Stream 逻辑是“循环逻辑”,因此不会这样做。
这就剩下使用递归方法作为解决方案,类似于问题中的尝试:
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"));
Output
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,0,s.length-1));
}
}
输入:“你好新世界”
Output:“世界更新你好”
由于您不能使用任何循环或反向方法,因此会留下递归方法。 然而,这不是很有效。
它的工作原理是重复拆分字符串减去前一个字符串的最后一个单词,然后以相反的顺序返回一个新的字符串。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.