Java ID检查字符方法?

Java ID检查字符方法?,java,arrays,methods,Java,Arrays,Methods,我被我的代码卡住了我有我需要找到的所有东西 员工ID的长度为8个或更多字符,并且仅由大写字母组成 和数字。前两个字符必须是大写字母,ID必须至少包含2位数字。写 一种方法,该方法将员工ID作为字符数组,如果ID有效或为false,则返回true 否则。 我有我的代码,但一旦找到前两个索引(如果它们是大写字母),它就不会递增 public static boolean isValidID(char [] id) { if(id.length >= 8)

我被我的代码卡住了我有我需要找到的所有东西 员工ID的长度为8个或更多字符,并且仅由大写字母组成 和数字。前两个字符必须是大写字母,ID必须至少包含2位数字。写 一种方法,该方法将员工ID作为字符数组,如果ID有效或为false,则返回true 否则。 我有我的代码,但一旦找到前两个索引(如果它们是大写字母),它就不会递增

public static boolean isValidID(char [] id) {      

      if(id.length >= 8)
      {
        validLen = true;
      }
      else if(id.length < 8)
      {
         validLen = false;
      }

      for(int i = 0; i < id.length; i++)
      {  
            if(Character.isUpperCase(0))
            {
               check2Cap++;
            }
            else if(Character.isUpperCase(1))
            {
               check2Cap++;   
            }
            else if(Character.isDigit(i))
            {
               check2Digits++;
            }          

     }  
     if(check2Cap == 2)
     {
        checkCapital = true;
     }
     if(check2Digits >= 2)
     {
        checkDig = true;
     } 
     return validLen && checkCapital && checkDig;
}
public静态布尔值isValidID(char[]id){
如果(id.length>=8)
{
validLen=true;
}
否则,如果(id.长度<8)
{
validLen=假;
}
for(int i=0;i=2)
{
checkDig=true;
} 
返回validLen&&checkCapital&&checkDig;
}

这应该行得通。使用代码点,这很好。将字符的2个流表示形式作为代码点值有点浪费,但它很优雅,这很好。绝对不是性能最好的代码

private static boolean valid(char[]id,int minimumLength,int minimumDigits,int minimumUppercase,int firstNLetter){
if(id.长度<最小长度){
返回false;
}
字符串idAsString=新字符串(id);
if(!idAsString.codePoints().limit(firstNLetter).allMatch(Character::isLetter)){
返回false;
}
if(idAsString.codePoints().filter(Character::isDigit).count()<最小位数){
返回false;
}
返回idAsString.codePoints().filter(字符::isUpperCase).count()>=minimumUppercase;
}
boolean first=valid(“GE7IMTWIK5.toCharArray(),8,2,2);
布尔秒=有效(“FRUMT3UMPO”.toCharArray(),8,2,2,2);
System.out.println(String.format(“first=%s,second=%s”,first,second));
首先,Character.XXX()调用应该使用
id[i]
,而不是
i
本身

第二,你应该先检查你的首字母大写字母

  if (id[0] < 'A' || id[0] > 'Z') return false;
  if (id[1] < 'A' || id[1] > 'Z') return false;
  for(int i = 2; i < id.length; i++)
  {
        //The code below is now unnecessary
        if(Character.isUpperCase(0))
        {
           check2Cap++;
        }
        else if(Character.isUpperCase(1))
        {
           check2Cap++;   
        }
        //end unnecessary
        else if(Character.isDigit(id[i]))
        {
           check2Digits++;
        }          

 }
if(id[0]<'A'| | id[0]>'Z')返回false;
如果(id[1]<'A'| | id[1]>'Z')返回false;
for(int i=2;i
将大写复选框移出循环

字符.isDigit(i)->错误检查。您应该检查字符,而不是索引


像这样的东西会有用的

  public static boolean isValidID(char [] id) {      

  boolean validStruct = (id.length >= 8) && (Character.isUpperCase(id[0]) && (Character.isUpperCase(id[1]))) ; 
  int numDigits =0 ;

  for(int i = 0; validStruct && i < id.length ; i++)
  {  
     if(Character.isDigit(id[i]))
         numDigits+=1; 
  }  
 return validStruct && (numDigits >= 2);
输出-

false
true

我假设您刚刚开始学习Java,但请记住,如果可以的话,正则表达式(REs)是测试此类字符串的最佳方法。当您进行大写比较时,它应该类似于Character.isUpperCase(id[0])。那么要求前两个字符为字母的要求是什么呢?哦!我的错,等一下!编辑固定的!
 public static void main(String [] args) throws InterruptedException
    {
     System.out.println(isValidID("FRUMT3UMPO".toCharArray()));
     System.out.println(isValidID("GE7IMTWIK5".toCharArray()));
    }  
false
true