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”。它的工作就是检查它是否是一个有效的日期。程序的其余部分运行良好只是这部分崩溃了
答案 0 :(得分:0)
lastSlash出错,因为firstSlash和lastSlash都具有相同的值
public int indexOf(int ch):返回指定字符第一次出现的字符串中的索引;如果字符未出现,则返回-1。
这一行 mmlnt = Integer.parseInt(date.substring(firstSlash + 1,lastSlash)); 给你错误..
因为 lastSlash< firstSlash + 1