我对编程非常陌生。你能告诉我为什么输出:
字符串索引超出范围:-1
class Palindrome {
public static String reverse(String s) {
if (s == "") {
return s;
}
else {
return reverse(s.substring(1,s.length())) + s.charAt(0);
}
}
public static void main(String args[]) {
System.out.print(reverse("galskjdf"));
}
}
答案 0 :(得分:1)
因为你正在以错误的方式进行字符串比较=>递归不会停在有效点。替换这个:
s == ""
用这个:
"".equals(s)
编辑嗯,看起来需要证据,这里是:http://ideone.com/TWm5U8
答案 1 :(得分:1)
使用
class Palindrome {
public static String reverse(String s) {
if ("".equals(s)) {
return s;
} else {
return reverse(s.substring(1,s.length())) + s.charAt(0);
}
}
public static void main(String args[]) {
System.out.print(reverse("galskjdf"));
}
}
请参阅How do I compare strings in Java?,Reverse a string in Java也可能会有所帮助(即使您可能已将上述代码作为编程练习,但通常会使用现有工具并不会有任何损害对于这种事情。)
使用
的原因"".equals(s)
而不是
s.equals("")
如下:如果s
为null
,后者将抛出NullPointerException
(因为您尝试在null
上调用方法),而前者仍然可以正常工作,因为你在"适当的"字符串,另请参阅Gracefully avoiding NullPointerException in Java但是,我还记得有些人批评这种方法,因为这可能会让你错过s
null
当它不应该是{{1}}的事实。你应该明确检查处理那种情况。)
答案 2 :(得分:0)
使用此功能:
public static String reverse(String s) {
if (s == null || s.length() <= 1) {
return s;
} else {
return reverse(s.substring(1)) + s.charAt(0);
}
}