[英]Comparing character to another character (Java)
我正在尝试制作一种方法来验证称为gNum的ID类型。
gNum必须由9个字符组成(第一个字符为“ G”,其余为数字)
private boolean validateGNum (String gNum) {
boolean valid = false;
if(gNum.length() == 9) {
/*this is where I have a problem.
Trying to see how I can check if the first character of the
string 'gNum' is "G"
*/
if(gNum.charAt(0).equalsIgnoreCase("g")) {
for (int i=1; i < 9; i++) {
if(Character.isDigit(gNum.charAt(i))) {
valid = true;
}
}
}
}
return valid;
}
这就是我所拥有的,并且出现“字符无法取消引用”错误。
如何解决此问题并使此代码起作用?
谢谢
您正在寻找的是substring方法:
if(gNum.substring(0, 1).equalsIgnoreCase("g")){...}
顺便说一句 ,如果发现任何不是有效数字的字符,可以通过返回false
来改善循环。 当前,如果“ g”后的任何字符是有效数字,则返回true;
例:
boolean validateGNum (String gNum) {
if (gNum.length() == 9) {
if (gNum.substring(0, 1).equalsIgnoreCase("g")){
for (int i = 1; i < 9; i++) {
if (!Character.isDigit(gNum.charAt(i))) return false;
}
return true;
}
}
return false;
}
或者,如果您想花一点点时间,可以这样做:
static boolean validateGNum (String gNum) {
return gNum.length() == 9
&& gNum.substring(0, 1).equalsIgnoreCase("g")
&& gNum.substring(1)
.codePoints()
.allMatch(Character::isDigit);
}
您的情况应改为
if(Character.toUpperCase(gNum.charAt(0)) == 'G')
您不能以原始类型调用方法,更不用说不能在char
上调用String
方法。
只需使用==比较字符即可。 还有另一个错误,它将仅用一位数字返回true,而不是全部为数字时返回true。
private static boolean validateGNum(String gNum) {
boolean valid = false;
if (gNum.length() == 9)
if (gNum.charAt(0) == 'G')
for (int i = 1; i < 9; i++)
if (!Character.isDigit(gNum.charAt(i)))
return false;
return true;
return valid;
}
正则表达式Pattern
是用于此类任务的出色类。 最基本的形式是String
类已经提供了matches
方法。 如果您需要比较多个字符串,则创建一个单独的Pattern
而新的Matchers
可能会更有效,因为它避免了模式的重新解释。
使用的模式是"[gG]\\\\d{8}"
,表示小写或大写G,后跟精确的8位数字。
jshell> System.out.println("G12345678".matches("[gG]\\d{8}"));
true
jshell> System.out.println("g12345678".matches("[gG]\\d{8}"));
true
jshell> System.out.println("G1234567".matches("[gG]\\d{8}"));
false
jshell> System.out.println("G123456789".matches("[gG]\\d{8}"));
false
jshell> System.out.println("Z12345678".matches("[gG]\\d{8}"));
false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.