1

我正在尝试检查 3 个条件以验证车牌号。但我似乎无法检查所有 3 个条件。长度必须在 4 -7 之间。前 3 个字符必须来自 a - z。第四个字符以后必须是数字 '0' - '9'。

我的问题的下一部分有问题。我需要实现计算 CheckDigit 方法,我试图将它添加到一个数组中以接受我的论证,以便我执行逐步指令来计算校验位。

下面是步骤,

  1. 取第二个和第三个字符并转换为与字母对应的数字。例如。A 是 1 B 是 2。

  2. 数字前面加 0 表示数字少 4 位。例如。SBA123 需要追加到 0123

  3. 将步骤 1 和 2 中的每个数字乘以 14、2、12、2、11、1

  4. 总结步骤 3 中的数字

  5. 将步骤 4 中的 sum 除以 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);

}
4

3 回答 3

2

在这里使用正则表达式是理想的。正则表达式是一种看起来很有趣、结构良好的字符串,它代表一个有限状态机,可以识别某些类型的字符串是否匹配模式。学习正则表达式将极大地改进您的字符串匹配/验证过程。

这是您应该使用的正则表达式:^[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);
}
于 2013-04-14T17:07:29.147 回答
1

你可以很容易地使用正则表达式来做到这一点,表达式

^[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();
}
于 2013-04-14T17:08:20.020 回答
0

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

您还可以查看“String.indexOf()”;它可以让您不必遍历(或初始化)一个字符数组。有一个字符串“abcdefg...”(和另一个“01234...”)。

您还可以查看方法Character.isLetter()Character.isDigit()取消数组和字符串处理的类似数组。

至于正则表达式,我总是喜欢那个老笑话:“假设你有一个问题,你决定用正则表达式解决它。现在你有两个问题......”当然它们很有用,但几乎没有那么多正如许多人认为的那样。并不是所有可以用他们解决的事情都应该用他们来解决。如果您有兴趣,这是一个很好的简单正则表达式问题入门。如果你不是,不要觉得你的解决方案缺少某种方式。

于 2013-04-14T17:21:08.357 回答