当我使用递归方法反转字符串时,它给了我stackOverflow错误。
public class ReverseString {
public static void main(String[] args) {
String str = "Juhi";
System.out.println(recursiveString(str));
}
static String recursiveString(String str) {
return !str.equals("") ? recursiveString(str.substring(1) + str.charAt(0)) : str;
}
}
答案 0 :(得分:3)
这应该可以解决问题:
static String recursiveString(String str) {
return !str.equals("") ? recursiveString(str.substring(1)) + str.charAt(0) : str;
}
在您的代码中,您并没有减少字符串参数的长度,它始终是相同的输入,因此基本上它正在进入无限循环。如果我们在递归调用之后移动串联部分,则每个递归调用的字符串都会更短,直到它为空,这表明递归结束。
答案 1 :(得分:0)
public static void main(String[] args) {
String str = "Juhi";
System.out.println(recursiveString(str));
}
static String recursiveString(String str) {
return !str.equals("") ? recursiveString(str.substring(1) ) + str.charAt(0): str;
}
}
答案 2 :(得分:0)
可识别Unicode的递归反向
尽管其他答案都向您显示了错误的出处以及如何编写适用于基本Unicode字符的递归字符串反向算法,但它们为supplementary Unicode characters产生了错误的结果。以下方法适用于所有Unicode字符:
static String recursiveReverse(String str) {
if (str.isEmpty())
return "";
int offsetToSecondCodePoint = str.offsetByCodePoints(0,1);
return recursiveReverse(str.substring(offsetToSecondCodePoint))
+ str.substring(0, offsetToSecondCodePoint);
}