javaid检查方法

javaid检查方法,java,methods,Java,Methods,我正在尝试编写一个方法,该方法采用“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;

我正在尝试编写一个方法,该方法采用“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;
}
公共静态布尔ID检查(字符串ID){
char[]idChar=ID.toCharArray();
布尔前半部分=假;
布尔secHalf=false;
对于(int i=0;i<5;++i){//检查前半部分
if((idChar[i]>47&&idChar[i]<58)){//检查ascii VAL以查看ID是否有效
前半部分=正确;
}
}
对于(inti=5;i47&&idChar[i]<58)){//检查ascii VAL以查看ID是否有效
secHalf=true;
}
}
//如果所有值都有效,则返回true。
if(firstHalf==true&&secHalf==true&&idChar[4]='-'&&ID.length()==9){
返回true;
}
返回false;
}

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

您最好使用正则表达式。是一个很好的入门资源!:)

比如:

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

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

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

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

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

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;}
分支

为了保持您的方法,如果您知道结果,我更愿意快速退出:

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;
    }
}
公共静态布尔id检查(字符串id)
{
//检查长度
如果(id.length()!=9)
返回false;
char[]idChar=id.toCharArray();
//检查破折号
if(idChar[4]!='-')
返回false;
//检查上半场
对于(int i=0;i<5;++i)
{
if(!(idChar[i]>47&&idChar[i]<58))
返回false;
}
//检查下半场
对于(int i=5;i 47&&idChar[i]<58))
返回false;
}
}

是的,因为如果其中一个零件包含数字,则将布尔变量设置为true。更好的选择可能是将firstHalf和secondHalf设置为true,然后在for循环中,如果它不是数字,则将布尔变量设置为false并中断循环。如果您熟悉正则表达式,可以使用带有正则表达式的匹配项,表示“匹配4位-4位”