繁体   English   中英

比较字符串整数问题

[英]Comparing String Integers Issue

我有一台读取7个字符的字母数字代码(由用户输入)的扫描仪。 String变量称为“代码”。

代码的最后一个字符(第7个字符,第6个索引)必须为数字,其余的可以为数字或字母。

因此,我试图抓住一个障碍,如果代码中的最后一个字符不是数字(0到9),则该方法的其余部分将无法执行。

但是,我的代码无法正常工作,即使我的代码以0到9之间的整数结尾,if语句也将得到满足,并打印出“代码中的最后一个字符为非数字”。

示例代码:45m4av7

CharacterAtEnd会按要求打印为字符串字符7。 但是我的程序仍然告诉我我的代码非数字结束。 我知道我的数字值是字符串字符,但这不重要,对吗? 我显然也不能将实际的整数值与“ |”进行比较,这主要是为什么im使用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语句并继续。 对?

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。

或者,尝试以下操作:

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);
}

您在这里进行按位运算: 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"));

我希望这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM