Java 如何检查字符串输入的格式

Java 如何检查字符串输入的格式,java,string,Java,String,我不确定我是否在错误的区域检查,或者我要检查的代码是否错误。我正在尝试检查999-A格式的员工Id是否有效。如有任何帮助,将不胜感激 public class Employee { private String name; private String employeeNumber; private String hireDate; // Constructor public Employee(String name, String employeeNumber,

我不确定我是否在错误的区域检查,或者我要检查的代码是否错误。我正在尝试检查999-A格式的员工Id是否有效。如有任何帮助,将不胜感激

    public class Employee {
  private String name;
  private String employeeNumber;
  private String hireDate;

  // Constructor
  public Employee(String name, String employeeNumber, String hireDate){

    this.name = name;

    if(isValidEmployeeNumber(employeeNumber) == true){
      this.employeeNumber = employeeNumber;
    } else{

    }
    this.hireDate = hireDate;

  }

  // Getters and Setters

  public String getName(){
    return name;
  }

  public String getEmployeeNumber(){
    return employeeNumber;
  }

  public String getHireDate(){
    return hireDate;
  }

  public void setName(String name){
    this.name = name;
  }

  public void setEmployeeNumber(String employeeNumber){
    this.employeeNumber = employeeNumber;
  }

  public void setHireDate(String hireDate){
    this.hireDate = hireDate;
  }

  //999-X
  private boolean isValidEmployeeNumber(String employeeNumber){

    if(Character.getNumericValue(employeeNumber.charAt(4)) > 10 &
        Character.getNumericValue(employeeNumber.charAt(4)) < 22)
    {
      /*
      int cutNum = Integer.parseInt(employeeNumber.substring(0,1));

      if(cutNum <= 0 && cutNum <= 9){

        cutNum = Integer.parseInt(employeeNumber.substring(1, 2));

        if(cutNum <= 0 && cutNum <= 9){
          cutNum = Integer.parseInt(employeeNumber.substring(2, 3));

          if(cutNum <= 0 && cutNum <= 9){

              setEmployeeNumber(employeeNumber);
              return true;

          }

        }

      }*/

      return true;

    }

    return false;
  }

}
公共类员工{
私有字符串名称;
私有字符串employeeNumber;
私人租赁;
//建造师
公共雇员(字符串名称、字符串employeeNumber、字符串hireDate){
this.name=名称;
如果(isValidEmployeeNumber(employeeNumber)==true){
this.employeeNumber=employeeNumber;
}否则{
}
this.hireDate=hireDate;
}
//接球手和接球手
公共字符串getName(){
返回名称;
}
公共字符串getEmployeeNumber(){
返回员工编号;
}
公共字符串getHireDate(){
回租;
}
公共void集合名(字符串名){
this.name=名称;
}
public void setEmployeeNumber(字符串employeeNumber){
this.employeeNumber=employeeNumber;
}
public void setHireDate(字符串hireDate){
this.hireDate=hireDate;
}
//999-X
私有布尔值isValidEmployeeNumber(字符串employeeNumber){
如果(Character.getNumericValue(employeeNumber.charAt(4))>10&
Character.getNumericValue(employeeNumber.charAt(4))<22)
{
/*
int-cutNum=Integer.parseInt(employeeNumber.substring(0,1));

if(cutNum\d{1}只是表示\d的一种更复杂的方式。如果070-N有效,但70-N无效

"\d{3}-\D" 
可能就是你要找的,或者

"\d\d\d-\D" 
但是\D匹配每个非数字,因此它也会匹配“097-?”。在Java源代码中,您还需要屏蔽反斜杠:

 "097-X".matches ("\\d\\d\\d-[A-Z]")

注意,中间的减去不需要掩蔽,只有在集合中,如果要从字面上理解:

 "097-X".matches (".*[,\\-/].")
在许多语言中,可以通过将其放在第一位或最后来避免:

 "097-X".matches (".*[-,/].")
 "097-X".matches (".*[,/-].")

正则表达式非常适合此任务:

private boolean isValidEmployeeNumber(String employeeNumber) {
    return employeeNumber.matches("[0-9]{3}-[A-Z]")
}
要分解正则表达式,请执行以下操作:

  • [0-9]{3}
    一个数字(0-9)3次
  • -
    仪表板
  • [A-Z]
    A-Z一次
其他任何东西都是无效的。注意
\D
对任何非数字都是有效的,我认为这不是您想要的