繁体   English   中英

Java更好的方式来编码这种简单的参数输入?

[英]Java better way to code this simple parameter intake?

“格式为XXX-L的员工识别号(字符串),其中每个X是0-9范围内的数字,L是'A'-'M'范围内的字母(小写和大写字母均为上可接受的)”

上面是一个字段,它将作为构造函数的参数。 现在,我打算确保字符串的前3个字母是介于0到9之间的数字,然后确保索引4中有一个破折号,然后确保AM之间存在一个字母在第5个索引中,全部使用if else语句。 有没有更好的方法来执行此操作,例如是否不必如此精确地输入参数,并且程序能够自行修复? 谢谢。

我对其进行了编码并尝试了正则表达式表达工具:

import java.util.regex.*;

public class Employee {

private String eName;
private String IDNumber;

public Employee(String name, String number) {
    String regex = "[0-9][0-9][0-9][\\-][a-mA-M]";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(number);
    this.eName = name;
    if(matcher.matches()) {
    this.IDNumber = number;
    } else{
        this.IDNumber = "999-M";
    }

}

public String getNumber() {
    System.out.println(IDNumber);
    return IDNumber;
}

public static void main(String[] args) {
    Employee e = new Employee("John", "123-f");
    e.getNumber();
    Employee c = new Employee("Jane","25z");
    c.getNumber();
}

}

我尚未对其进行彻底的测试,但是它可以工作,但是从其他人的正则表达式表达来看,我的似乎很新奇。 我想知道是否有人可以帮助我构建更短或更佳的正则表达式。

^\\d{3}-[a-mA-M]$

我认为这应该是一种进步。

  1. ^表示文本的开头
  2. \\d表示任何数字(反斜杠本身必须转义)
  3. {3}表示前一场比赛3次
  4. 连字符是literal ,只要它不在方括号中
  5. [a-mA-M]表示您所知道的任何大写或小写字母
  6. $表示文本的结尾

我用这个网站在regexpal.com上进行了测试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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