我试图检查3的条件,以验证汽车牌照号码。但我似乎无法检查所有三个条件。长度必须在4-7之间。前3个字符必须从a开始。第四个字符必须是数字'0‘- '9’。
我的下一部分问题有问题。我需要实现计算CheckDigit方法,我已经尝试添加了一个数组来接受争论,让我一步一步地做指令来计算校验位数。
下面是步骤,
任何帮助对我来说都是很好的开始。下面是我要修改的代码,
请指出我的错误。
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);
}发布于 2013-04-14 17:07:29
在这里使用正则表达式将是理想的。正则表达式看起来很有趣,构造得很好,表示一个有限状态机,它可以识别某些类型的字符串是否匹配某个模式。学习正则表达式将极大地改进字符串匹配/验证过程。
这是您应该使用的RegEx:^[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-14 17:08:20
您可以很容易地使用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();
}发布于 2013-04-14 17:21:08
您总是测试字符串的第一个字符(charAt(0)),而不是使用设置的循环计数器I的值。此外,您没有测试的数字。
您还可以查看"String.indexOf()";它可以省去遍历(或初始化)一个字符数组的麻烦。有一个字符串“abcdefg.”(另一个“01234.”)
您还可以查看Character.isLetter()和Character.isDigit()方法,删除数组和处理字符串的类似数组。
至于正则表达式,我总是喜欢一个老笑话:“假设你有一个问题,然后你决定用正则表达式来解决它。现在你有两个问题……”当然,它们是有用的,但并没有很多人认为的那么有用。并不是所有可以用它们解决的问题都应该用它们来解决。如果您感兴趣,这是一个很好的简单正则表达式问题。如果你不是,不要觉得你的解决方案是缺乏的。
https://stackoverflow.com/questions/16001687
复制相似问题