输入1个字符时,反向字符串代码返回错误

时间:2017-09-18 00:16:02

标签: java string

我编写了这个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;
    }
 }
}

2 个答案:

答案 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(),它应该可以工作。查看下面的演示。

this

答案 1 :(得分:0)

如果你观察你的代码,在你的ReverseString方法中很好地处理字符串反转..你在main中处理第一个字符时处理不当..问题是当字符串中只有一个字符时.. substring(1)给出了一个异常

取消注释这两行,如下所示。

//String firstchar=stringtoReverse.substring(0, 1);
String strReverse=ReverseString(stringtoReverse.substring(1));
//strReverse=strReverse+firstchar;