比较字符与另一个字符(Java)

时间:2018-05-31 19:52:34

标签: 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; 
   }

这就是我所拥有的,我得到'char无法解除引用'错误。

如何解决此问题并使此代码正常工作?

谢谢

4 个答案:

答案 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