Substring导致String索引超出范围错误

时间:2017-10-25 14:47:59

标签: java indexing range substring

我正在编写一个可以反转2个4位数字的程序,我写了一个方法来完成它。项目构建中没有错误,但我得到"字符串索引超出范围:-3"当我试图运行它。我对编程很新,我不知道我做错了什么。

以下是代码:

    public static void main(String[] args)
    {
        int num1 = 1;
        int num2 = 1;

        Scanner console = new Scanner(System.in);

        while (num1 <1000 || num1 > 9999)
        {
            System.out.println("Please enter a positive 4 digit number");
            num1 = console.nextInt();
        }

        String numString1 = Integer.toString(num1);

        while (num2 <1000 || num2 > 9999)
        {
            System.out.println("Please enter another positive 4 digit number");
            num2 = console.nextInt();
        }

        String numString2 = Integer.toString(num2);

        int numReverse1 = stringReverse(numString1);

        int numReverse2 = stringReverse(numString2);

        System.out.println(numReverse1 + numReverse2);

        System.out.println("The product of your 2 reversed numbers is: " + (numReverse1 * numReverse2));

    }

    public static int stringReverse (String numString)
    {
        String c1c2c3 = numString.substring(4);
        String c2c3c4 = numString.substring(1);

        String c1c2 = c1c2c3.substring(3);
        String c3c4 = c2c3c4.substring(1);

        String c1 = c1c2.substring(2);
        String c2 = c1c2.substring(1);
        String c3 = c3c4.substring(2);
        String c4 = c3c4.substring(1);

        String numStringReverse = c4 + c3 + c2 + c1;

        int reversedString = Integer.parseInt(numStringReverse);

        return reversedString;
    }
}

2 个答案:

答案 0 :(得分:1)

在行中:

String c1c2c3 = numString.substring(4);
String c1c2 = c1c2c3.substring(3);

您正在尝试访问不存在的位置。 Java中的数组从0开始直到“ - 1” 开始索引是包含的,结束索引在子字符串方法中是独占的。

stringReverse的正确版本可能是:

public static int stringReverse (String numString)
{
    String c1c2c3 = numString.substring(0,3);
    String c2c3c4 = numString.substring(1,4);

    String c1c2 = c1c2c3.substring(0,2);
    String c3c4 = c2c3c4.substring(1,3);

    String c1 = c1c2.substring(0,1);
    String c2 = c1c2.substring(1,2);
    String c3 = c3c4.substring(0,1);
    String c4 = c3c4.substring(1,2);

    String numStringReverse = c4 + c3 + c2 + c1;

    int reversedString = Integer.parseInt(numStringReverse);

    return reversedString;
}

另外,请尝试阅读以下答案:Java: substring index range

答案 1 :(得分:0)

在Java中可能有更优雅的方法来反转字符串。如果您想在Java中使用简单的替代方法,请查看类java.lang.StringBuilder

查看文档并查找reverse方法。