java ID检查方法

问题描述 投票:0回答:3

我试图编写一个方法,其中包含“xxxx-xxxx”形式的I​​D(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;
}
java methods
3个回答
2
投票

在这种情况下,使用正则表达式会简单得多:

\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位数)

1
投票

你的if语句只查看一个数字来确定它是否将布尔值设置为true。因此,如果每一半中数字的any有效,则布尔值将设置为true。

你可能最好使用正则表达式。 regexr.com是一个很好的入门资源! :)

就像是:

[1-9]{4}-[1-9]{4} (You can also use \d)

0
投票

您只检查是否至少有一个匹配的字符,而不是任何输入字符是否失败。

在您使用正则表达式并检查输入是否匹配后,为任何Java开发人员提供易于理解的快速解决方案:

public static boolean idCheck(String id){
  return Pattern.matches("\\d{4}-\\d{4}", id);
}

如果你想保持检查的方式,你应该从true booleans开始,检查它们是否保持真实。

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.