有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java StringOutofBoundsException

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

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

例外情况如下:

线程“main”java中出现异常。lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 在爪哇。朗,弦。子字符串(未知源) 在地狱世界。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) 个答案

  1. # 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();