Java 检查3个标准

Java 检查3个标准,java,exception,char,boolean,Java,Exception,Char,Boolean,我试图检查3个条件,以验证汽车车牌号。但我似乎无法检查所有3个条件。长度必须介于4到7之间。前3个字符必须来自a-z。第四个字符必须是数字“0”-“9” 我对问题的下一部分有疑问。我需要实现computecheckdigit方法,我已经尝试在数组中添加该方法,以接受参数,让我执行逐步指令来计算校验位 以下是步骤 取第二个和第三个字符,并将其转换为与字母表对应的数字。A是1,B是2 数字前面加0表示数字少于4位。例如,SBA123需要附加到0123 将步骤1和2中的每个数字乘以14,2,12,2,

我试图检查3个条件,以验证汽车车牌号。但我似乎无法检查所有3个条件。长度必须介于4到7之间。前3个字符必须来自a-z。第四个字符必须是数字“0”-“9”

我对问题的下一部分有疑问。我需要实现computecheckdigit方法,我已经尝试在数组中添加该方法,以接受参数,让我执行逐步指令来计算校验位

以下是步骤

  • 取第二个和第三个字符,并将其转换为与字母表对应的数字。A是1,B是2

  • 数字前面加0表示数字少于4位。例如,SBA123需要附加到0123

  • 将步骤1和2中的每个数字乘以14,2,12,2,11,1

  • 总结步骤3中的数字

  • 将步骤4中的总和除以19,然后取余数,在表格中找到校验位

  • 任何帮助对我来说都是一个好的开始。 下面是我的代码,我有更改

    请指出我的错误

    public static void validateCarPlate(String y)throws InvalidCarPlateException{
    String rex = "[a-zA-Z]{3}[0-9]{1,4}";
    if(y.matches(rex)){
        computeCheckDigit(y);
    }else{
        throw new InvalidCarPlateException();
    }
    }
    public static void computeCheckDigit(String x){
    int [] arr = Integer.parseInt(x);
    
    }
    
    在这里使用将是理想的选择。正则表达式是一种外观有趣、构造良好的字符串,它表示一个,可将某些类型的字符串识别为匹配模式或不匹配。学习正则表达式将大大改进字符串匹配/验证过程

    这是您应该使用的正则表达式:
    ^[a-zA-Z]{3}[0-9]{1,4}$

    让我们分析一下这个看起来很滑稽的字符串的含义:

    • ^
      :这是字符串的开头(前面没有字符)

    • [a-zA-Z]
      :字母字符

    • {3}
      :这些字母字符中正好有3个

    • [0-9]
      :然后是数字字符

    • {1,4}
      :这些数字字符中的1到4个(包括)

    • $
      :这是字符串的结尾(没有剩余字符)

    用法示例:

    String myStr = "abc123";
    System.out.println(isValidString(myStr));
    
    public boolean isValidString(String input) {
      String regex = "^[a-zA-Z]{3}[0-9]{1,4}$";
      if(input==null) { return false; }
      return input.trim().matches(regex);
    }
    
    可以很容易地使用表达式

    ^[a-z]{3}[0-9]{1,4}$
    
    会有用的

    这里有一个例子

    public boolean validatePlate(final String string) {
        final Matcher matcher = Pattern.compile("^[a-z]{3}[0-9]{1,4}$").matcher(string);
        return matcher.matches();
    }
    

    您总是测试字符串的第一个字符(charAt(0)),而不是使用您设置的循环计数器i的值。此外,您没有对数字进行测试

    您还可以查看“String.indexOf()”;这样可以避免循环(或初始化)字符数组。有一个字符串“abcdefg…”(还有一个字符串“01234…”)

    您还可以研究方法
    Character.isleter()
    Character.isDigit()
    ,并将数组和字符串处理为数组


    至于正则表达式,我总是喜欢那个老笑话:“假设你有一个问题,你决定用正则表达式解决它。现在你有两个问题……”当然它们很有用,但并不像很多人想象的那么有用。并不是所有可以用他们解决的问题都应该用他们来解决。如果您感兴趣,这是一个很好的简单正则表达式问题。如果你不是,不要觉得你的解决方案有点欠缺。

    正则表达式会更有效。你能告诉我们这些模板是否有效吗:AB11、A111、ABC1?他确实定义了一些东西,所以我们可以回答:前两个是无效的(前3个字母没有),第三个是正确的(前三个字母中的字母(案例问题?),结尾是数字。长度定义为从4-7开始运行,所以我们知道有1-4个数字是可以的。@Theook rcook是正确的。非常感谢。这确实解决了我的部分问题。现在,下一部分也让我感到困惑=)为了更好的性能,它应该是
    静态最终模式板_REGEX=Pattern.compile(“^[a-zA-Z]{3}[0-9]{1,4}$”
    返回板_REGEX.matcher(输入).matches()
    @Cebence您的方法更有效,但对于一个正则表达式初学者来说可能更难理解。Thx伙计们,正则表达式真的很有用,它可以解决我的问题。但我的问题的下一步是使用参数来计算校验位并返回字符。我相信我需要使用一个数组,并从那里转换所有需要的步骤。在使用正则表达式后,如何将参数插入数组。@LRZJohn请编辑您的问题,以包含校验位要求的规范