如何使用else if语句检查输入中的最后8个字符是否为数字并且不为零?爪哇

时间:2020-11-12 01:14:19

标签: java numberformatexception

我正在尝试构建一个计算成绩的程序。其中的一部分要求以正确的格式(A #########)输入学生ID。我要测试的错误是:输入是否为“ quit” ?、第一个字符为“ A” ?、总长度为9个字符?,最后8个字符为数字?以及最后8个数字是否为0?我弄清楚了前三个条件,但我不知道如何检查后两个条件。我还需要包含NumberFormatException。我的代码当前无法正常运行,但是到目前为止,这是我的工作:

public static String getStudentID(String sid) {
      boolean goodval = false;
      long snum = Long.parseLong(sid.substring(1));
        
      do{
          try{
              if (sid.equals("quit")) {
                  goodval = true;
              } else if (sid.charAt(0) != 'A') {
                  System.out.println("Student ID must start with 'A'");
                  goodval = false;
              } else if (sid.length()!=9) {
                  System.out.println("Student ID must be 9 characters long");
                  goodval = false;
              } else if (Long.parseLong(sid.substring(1))) {
                  goodval = false;
              } else {
                  goodval = true;
              }
    
          } catch (NumberFormatException e){ 
            System.out.println("The last part of the ID" + sid.substring(1) + " was not a number.");
            sc.nextLine();
          }
      } while (goodval = false);
      return sid;
   }

2 个答案:

答案 0 :(得分:0)

此正则表达式应符合所有要求 : [A] {1} \ d {8}(?<!A00000000)|退出

在此处进行测试:http://regexstorm.net/tester?p=%5bA%5d%7b1%7d%5cd%7b8%7d%28%3f%3c!A00000000%29%7cquit&i=A12345678

答案 1 :(得分:0)

String类具有方法调用length(),该方法调用返回一个整数,该整数表示String中的字符数。字符串的最后八个字符将通过length() - 1索引到length() - 8

Character类具有一个感兴趣的静态方法isDigit(),如果字符是数字,则该方法将返回true

我不确定您要如何构建代码,但是下面的示例将为您分解备选方案。

for(int counter = 0; counter < sid.length(); counter++)
{
    if(Character.isDigit(sid.charAt(counter))
    {
        if(sid.charAt(counter) == '0')
        {
            // it's a digit AND it's a zero
        }
        else
        {
            // it's a digit, but not a zero
        }
    }
    else
    {
        // it's alpha or whitespace
    }
}