我知道这个错误是由数字格式异常引起的,但我不知道如何修复它。我试着做一个函数来检查变量是否是数字或字符串 这是我的代码
public boolean checkNumber(String x) {
try{
Integer.parseInt(x);
return true;
}catch(NumberFormatException ex){
return false;
}
}
这是一个函数采用格式为dd / mm / yyyy的参数, 拆分并将其存储在一个数组中,然后调用前一个函数来确定所有索引是否都是整数。
public boolean CheckBirthDate(String birthdate){
int B = 0;
String Line = birthdate;
String[] seprated = Line.split("/");
if( checkNumber(seprated[0]) && checkNumber(seprated[1]) && checkNumber(seprated[2])) {
B = 1;
}
if(seprated.length == 3 && Integer.parseInt(seprated[0]) <= 31 && Integer.parseInt(seprated[1]) <= 12 && Integer.parseInt(seprated[2]) >= 1950 && Integer.parseInt(seprated[2]) <= 2017 && B == 1){
return true;
}else{
return false;
}
}
答案 0 :(得分:2)
为什么不使用DateFormat?
date = Fri May 25 00:00:00 CET 1973
结果:
{{1}}
答案 1 :(得分:1)
这将有效:
public boolean CheckBirthDate(String birthdate) {
int B = 0;
String Line = birthdate;
String[] seprated = Line.split("/");
if (checkNumber(seprated[0]) && checkNumber(seprated[1]) && checkNumber(seprated[2])) {
B = 1;
}
if (B == 1 && seprated.length == 3 && Integer.parseInt(seprated[0]) <= 31 && Integer.parseInt(seprated[1]) <= 12
&& Integer.parseInt(seprated[2]) >= 1950 && Integer.parseInt(seprated[2]) <= 2017) {
return true;
} else {
return false;
}
}
问题是,您检查if子句末尾是否B == 1
而不是开头。因此,java尝试解析整数,即使它尚未验证它实际上是一个数字。
我还会使用布尔值B
而不是int。但一般来说,SurfMan的解决方案可能是最好和最漂亮的
答案 2 :(得分:1)
我建议调试以找出错误发生的位置。
无论如何,最后一个条件,我建议你改变顺序。首先检查字符串是否为数字,这是完美的,然后将结果存储在变量中,很好。问题是条件工作的方式可能是这里的问题。 你最后检查一下是否有数字,应该在开头就完成,如:
if (B == 1 && seprated.length == 3 && Integer.parseInt(seprated[0]) <= 31 && Integer.parseInt(seprated[1]) <= 12
&& Integer.parseInt(seprated[2]) >= 1950 && Integer.parseInt(seprated[2]) <= 2017) {
return true;
} else {
return false;
}
这种方式首先检查第一个条件,如果是假,它不会继续执行其他条件,因为false&amp; true总是假的