将字符与另一个字符进行比较(Java)

将字符与另一个字符进行比较(Java),java,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 th

我正在尝试创建一个方法来验证一个名为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不能被解除引用”错误

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


谢谢

您正在寻找的是子字符串方法:

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

你的情况应该改为

if(Character.toUpperCase(gNum.charAt(0)) == 'G')

不能对基元类型调用方法,更不用说不能对字符调用String方法。

只需使用==来比较字符。还有一个错误,它只返回一个数字为真,而不是所有数字都是真的

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;
}
正则表达式是用于此类任务的优秀类。在最基本的形式中,String类已经提供了一个方法。如果需要比较多个字符串,那么创建一个单独的模式和新的匹配器可能会更有效,因为它可以避免对模式的重新解释

要使用的模式是[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

字符是基元。使用==来比较字符。可能重复
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