我的java程序给了我一个StringIndexOutOfBoundsException

时间:2014-03-16 16:56:40

标签: java string runtime-error

public static boolean isValidDate(String date) {
    int firstSlash, lastSlash, ddlnt, mmlnt, yylnt;
    int[] Days = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    boolean dateValid = true;
    String mlnt;
    firstSlash = date.indexOf("/");
    lastSlash = date.indexOf("/");
    ddlnt = Integer.parseInt(date.substring(0, firstSlash));
    mmlnt = Integer.parseInt(date.substring(firstSlash + 1, lastSlash));
    yylnt = Integer.parseInt(date.substring(lastSlash + 1));
    if ((ddlnt == 0) || (mmlnt == 0) || (yylnt == 0))
        dateValid = false;
    else if (mmlnt > 12)
        dateValid = false;
    else if ((ddlnt == 29)
            && (mmlnt == 2)
            && ((((yylnt % 4 == 0) && (yylnt % 100 != 0) || (yylnt % 400 == 0)))))
        dateValid = true;
    else if (ddlnt > Days[mmlnt - 1])
        dateValid = false;
    return dateValid;
}

这是我正在处理的项目中的一小段代码,当它运行时会产生以下错误

J:\>java Text5 2 A 0 11/10/1995 11/12/1995
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: -1
        at java.lang.String.substring(Unknown Source)
        at Text5.isValidDate(Text5.java:142)
        at Text5.ValidDate(Text5.java:117)
        at Text5.ArgumentCheck(Text5.java:84)
        at Text5.main(Text5.java:19)

J:\>

第142行是这样的:

 mmlnt = Integer.parseInt(date.substring(firstSlash+1,lastSlash));

这部分代码接收带有日期的字符串即。 “11/10/1995”。它的工作就是检查它是否是一个有效的日期。程序的其余部分运行良好只是这部分崩溃了

1 个答案:

答案 0 :(得分:0)

lastSlash出错,因为firstSlash和lastSlash都具有相同的值

public int indexOf(int ch):返回指定字符第一次出现的字符串中的索引;如果字符未出现,则返回-1。

这一行 mmlnt = Integer.parseInt(date.substring(firstSlash + 1,lastSlash)); 给你错误..

因为 lastSlash< firstSlash + 1