我试图编写一个方法,其中包含“xxxx-xxxx”形式的ID(x是任意数字1-9),并检查输入的ID是否有效。例如,1111-1111有效,但不会是111p-1111或11111-1111。但是,在我编写了这个方法之后,即使ID的格式为111p-1111,它也是如此。
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开发人员提供易于理解的快速解决方案:
public static boolean idCheck(String id){
return Pattern.matches("\\d{4}-\\d{4}", id);
}
如果你想保持检查的方式,你应该从true
boolean
s开始,检查它们是否保持真实。
boolean firstHalf = true;
boolean secHalf = true;
从而使用firstHalf &= true
进行更新并使用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;
}
}