我正在尝试创建一种方法来验证一种名为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;
}
这就是我所拥有的,我得到'char无法解除引用'错误。
如何解决此问题并使此代码正常工作?
谢谢
答案 0 :(得分:1)
您正在寻找的是子字符串方法:
if(gNum.substring(0, 1).equalsIgnoreCase("g")){...}
另外,如果您发现不是有效数字的任何字符,则可以通过返回false
来改善循环。目前,如果&#34; g&#34;之后有任何字符,您将返回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);
}
答案 1 :(得分:0)
您的病情应改为
if(Character.toUpperCase(gNum.charAt(0)) == 'G')
您不能在基本类型上调用方法,甚至不能提及您无法在String
上调用char
方法。
答案 2 :(得分:0)
只需使用==来比较字符。而且还有另一个错误,只用一位数就会返回,而不是全部都是数字。
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;
}
答案 3 :(得分:0)
正则表达式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