我编写了这个java程序来反转输入的字符串,但是当我只输入1个字符时,例如“a”就是炸弹,我无法弄清楚原因。 这是代码:
import java.util.*;
public class Program5_JohnHuber
{
public static void main(String reverseStyle[])
{
Scanner input=new Scanner(System.in);
System.out.print("\nEnter the string: ");
String stringtoReverse;
stringtoReverse=input.nextLine();
String firstchar=stringtoReverse.substring(0, 1);
String strReverse=ReverseString(stringtoReverse.substring(1));
strReverse=strReverse+firstchar;
System.out.println("\nThe reversed string is: "+ strReverse);
}
public static String ReverseString(String str)
{
String strReverse = "";
if(str.length() == 1)
{
return str;
}
else
{
strReverse += str.charAt(str.length()-1) +
ReverseString(str.substring(0,str.length()-1));
return strReverse;
}
}
}
答案 0 :(得分:0)
在ReverseString()
方法中添加一个基本案例,如果输入本身为空字符串,则返回空字符串:
public static String ReverseString(String str) {
String strReverse = "";
if ("".equals(str)) {
return strReverse;
}
if (str.length() == 1) {
return str;
}
else {
strReverse += str.charAt(str.length()-1) +
ReverseString(str.substring(0,str.length()-1));
return strReverse;
}
}
这应该起作用的原因是,在单个字符的情况下,您将空字符串传递给反向方法,然后尝试遍历该字符串。
实际上,你甚至不需要在这一点上对第一个字符进行子串,只需将任何字符串(包括空字符串)传递给ReverseString()
,它应该可以工作。查看下面的演示。
答案 1 :(得分:0)
如果你观察你的代码,在你的ReverseString方法中很好地处理字符串反转..你在main中处理第一个字符时处理不当..问题是当字符串中只有一个字符时.. substring(1)给出了一个异常
取消注释这两行,如下所示。
//String firstchar=stringtoReverse.substring(0, 1);
String strReverse=ReverseString(stringtoReverse.substring(1));
//strReverse=strReverse+firstchar;