繁体   English   中英

Java ID检查方法

[英]java ID check method

我试图编写一个方法,该方法采用“ xxxx-xxxx”形式的I​​D(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM