我有一个扫描仪,读取7个字符的字母数字代码(由用户输入)。 String变量称为“代码”。
代码的最后一个字符(第7个字符,第6个索引)必须是NUMERIC,而其余字符可以是数字或字母。
所以,我试图制作一个catch,如果代码中的最后一个字符只是一个数字(从0到9),它将停止执行该方法的其余部分。
但是,我的代码没有按预期工作,即使我的代码以0到9之间的整数结束,也会满足if语句,并打印出“代码中的最后一个字符是非数字的”。 / p>
示例代码:45m4av7
CharacterAtEnd打印出字符串字符7,就像它应该的那样。 但是我的程序仍然告诉我我的代码以非数字结尾。 我知道我的数字值是字符串字符,但它不应该重要,是吗? 我也显然无法将实际的整数值与“|”进行比较,这主要是为什么我使用String.valueOf,并采用0-9的字符串字符。
String characterAtEnd = String.valueOf(code.charAt(code.length()-1));
System.out.println(characterAtEnd);
if(!characterAtEnd.equals(String.valueOf(0|1|2|3|4|5|6|7|8|9))){
System.out.println("INVALID CRC CODE: last character in code in non-numerical.");
System.exit(0);
我不能为我的生活,弄清楚为什么我的程序告诉我我的代码(最后有一个7)以非数字结束。它应该跳过if语句并继续。正确?
答案 0 :(得分:0)
String
contains
方法适用于此处:
String digits = "0123456789";
digits.contains(characterAtEnd); // true if ends with digit, false otherwise
String.valueOf(0|1|2|3|4|5|6|7|8|9)
实际上是"15"
,当然永远不会等于最后一个字符。这应该是有意义的,因为0|1|2|3|4|5|6|7|8|9
使用整数数学计算为15,然后转换为字符串。
或者,试试这个:
String code = "45m4av7";
char characterAtEnd = code.charAt(code.length() - 1);
System.out.println(characterAtEnd);
if(characterAtEnd < '0' || characterAtEnd > '9'){
System.out.println("INVALID CRC CODE: last character in code in non-numerical.");
System.exit(0);
}
答案 1 :(得分:0)
您正在执行按位操作:if(!characterAtEnd.equals(String.valueOf(0|1|2|3|4|5|6|7|8|9)))
查看|
和||
这段代码应该使用正则表达式来完成你的任务:
String code = "45m4av7";
if (!code.matches("^.+?\\d$")){
System.out.println("INVALID CRC CODE");
}
此外,作为参考,此方法有时在类似的情况下派上用场:
/* returns true if someString actually ends with the specified suffix */
someString.endsWith(suffix);
由于.endswith(suffix)
不接受正则表达式,如果您想要查看所有可能的小写字母值,则需要执行以下操作:
/* ASCII approach */
String s = "hello";
boolean endsInLetter = false;
for (int i = 97; i <= 122; i++) {
if (s.endsWith(String.valueOf(Character.toChars(i)))) {
endsInLetter = true;
}
}
System.out.println(endsInLetter);
/* String approach */
String alphabet = "abcdefghijklmnopqrstuvwxyz";
boolean endsInLetter2 = false;
for (int i = 0; i < alphabet.length(); i++) {
if (s.endsWith(String.valueOf(alphabet.charAt(i)))) {
endsInLetter2 = true;
}
}
System.out.println(endsInLetter2);
请注意,上述两种方法都不是一个好主意 - 它们很笨重而且效率很低。
离开ASCII方法,你甚至可以这样做:
ASCII参考:http://www.asciitable.com/
int i = (int)code.charAt(code.length() - 1);
/* Corresponding ASCII values to digits */
if(i <= 57 && i >= 48){
System.out.println("Last char is a digit!");
}
如果你想要一个单行,请坚持使用正则表达式,例如:
System.out.println((!code.matches("^.+?\\d$")? "Invalid CRC Code" : "Valid CRC Code"));
我希望这有帮助!