繁体   English   中英

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

[英]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.

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