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