StringOutofBoundsException

时间:2014-11-11 01:13:34

标签: java exception

当我为n添加while循环时,会出现一个越界异常,如果我把它取出它是完美的。我稍后会将数据添加到数组中,但它会产生错误....

String day = date.substring(0, spacePos);   

例外情况如下:

线程中的异常" main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1     at java.lang.String.substring(Unknown Source)     在HelloWorld.main(HelloWorld.java:21)

Scanner userInputScanner = new Scanner(System.in);              // I/O Stream
    String months[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};   // Months to Compare
    int n = userInputScanner.nextInt();

    while(n != 0)
    {
        System.out.print("Enter Data: ");
        String date = userInputScanner.nextLine();                  // Input and Store Data
        String output;                                              // Program Output

        int spacePos = date.indexOf(" ");                           // Data before first space
        int lastSpacePos = date.lastIndexOf(" ");                   // Data after last space

        String day = date.substring(0, spacePos);                   // First String
        String month = date .substring(spacePos + 1, lastSpacePos); // Middle String
        String year = date.substring(lastSpacePos + 1);             // Last String

        output = year + "-" + month + "-" + day;                    // Output new values
        System.out.print(output);   
    }

有人可以帮我解决这个错误吗?如果您需要更多数据,请询问。

1 个答案:

答案 0 :(得分:1)

当您使用int n = userInputScanner.nextInt();时,您会留下下一个nextLine()电话立即消耗的尾随换行符。您得到一个空行,因此String次来电无效。

int n = userInputScanner.nextInt();
while(n != 0)
{
    System.out.print("Enter Data: ");
    String date = userInputScanner.nextLine();
    if (date.length() == 0) continue; // <-- retry.

或者,像

int n = userInputScanner.nextInt();
userInputScanner.nextLine(); // <-- consume trailing newline.
while(n != 0)
{
    System.out.print("Enter Data: ");
    String date = userInputScanner.nextLine();