[英]java ID check method
我试图编写一个方法,该方法采用“ xxxx-xxxx”形式的ID(x为1-9的任意数字),并检查输入的ID是否有效。 例如,1111-1111是有效的,但111p-1111或11111-1111无效。 但是,写完此方法后,即使ID的格式为111p-1111,它也可以显示为true。
public static boolean idCheck(String ID){
char[] idChar = ID.toCharArray();
boolean firstHalf = false;
boolean secHalf = false;
for (int i = 0; i < 5; ++i){//Check first half
if ((idChar[i] > 47 && idChar[i] < 58)){//Checks ascii vals to see if valid ID
firstHalf = true;
}
}
for (int i = 5; i < idChar.length; ++i){//Check second half
if ((idChar[i] > 47 && idChar[i] < 58)){//Checks ascii vals to see if valid ID
secHalf = true;
}
}
//If all values are valid, returns true.
if (firstHalf == true && secHalf == true && idChar[4] == '-' && ID.length() == 9){
return true;
}
return false;
}
在这种情况下,使用正则表达式会更简单:
\d{4}-\d{4}
在Java中:
static boolean idCheck(String id) {
return id.matches("\\d{4}-\\d{4}");
}
如果您不熟悉正则表达式,请按以下说明进行:
\\d
匹配数字0-9
{4}
重复最后一个令牌4次(匹配4位数字) -
从字面上匹配连字符 \\d
匹配数字0-9
{4}
重复最后一个令牌4次(匹配4位数字) 您的if
语句仅查看一个数字来确定是否将布尔值设置为true。 因此,如果每一半中的any
数字均有效,则布尔值将设置为true。
使用正则表达式可能更好。 regexr.com是一个很好的入门资源! :)
就像是:
[1-9]{4}-[1-9]{4} (You can also use \d)
您仅检查是否存在至少一个匹配的字符,而不检查是否有任何输入字符失败。
要获得对任何Java开发人员来说都易于理解的快速解决方案,您可以使用Regex并检查输入是否匹配:
public static boolean idCheck(String id){
return Pattern.matches("\\d{4}-\\d{4}", id);
}
如果要保持检查的方式,则应从true
boolean
s开始,并检查它们是否为true。
boolean firstHalf = true;
boolean secHalf = true;
然后使用firstHalf &= true
进行更新,并使用else{ firstHalf = false; }
else{ firstHalf = false; }
分支。
为了保持您的方法,如果您知道结果,我宁愿总是快速退出:
public static boolean idCheck(String id)
{
//check length
if (id.length() != 9)
return false;
char[] idChar = id.toCharArray();
//check for dash
if (idChar[4] != '-')
return false;
//check first half
for (int i = 0; i < 5; ++i)
{
if (!(idChar[i] > 47 && idChar[i] < 58))
return false;
}
//check second half
for (int i = 5; i <= 10; ++i)
{
if (!(idChar[i] > 47 && idChar[i] < 58))
return false;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.