java - 如何确保字符串具有特定格式

标签 java string

目前我有这样的代码

public class Department {

    public static final String MESSAGE_DEPARTMENT_CONSTRAINTS =
            "Department names should only contain alphanumeric characters and spaces, and it should not be blank\n"
            + "Department names should start with a name, followed by 'Management'";


    public static final String DEPARTMENT_VALIDATION_REGEX = "[\\p{Alnum}][\\p{Alnum} ]*";

    public final String fullDepartment;

    public Department(String department) {
        requireNonNull(department);
        checkArgument(isValidDepartment(department), MESSAGE_DEPARTMENT_CONSTRAINTS);
        fullDepartment = department;
    }

    /**
     * Returns true if a given string is a valid department name.
     */
    public static boolean isValidDepartment(String test) {
        return (test.matches(DEPARTMENT_VALIDATION_REGEX) && (test.indexOf("Management") >= 0));
    }


    @Override
    public String toString() {
        return fullDepartment;
    }

    @Override
    public boolean equals(Object other) {
        return other == this // short circuit if same object
                || (other instanceof Department // instanceof handles nulls
                && fullDepartment.equals(((Department) other).fullDepartment)); // state check
    }

    @Override
    public int hashCode() {
        return fullDepartment.hashCode();
    }

}

我希望代码只允许创建有效的部门名称

示例:

  • 初级管理人员
  • 高级管理人员

但是,现在我面临一个问题,“管理”这个词可以放在任何地方,但仍然被认为是有效的

示例:

  • 管理
  • 初级管理人员

创建部门时,如何确保部门名称后面必须包含“管理”一词?谢谢。

最佳答案

只需将此函数更改为:

public static boolean isValidDepartment(String test) {
  return test.matches(DEPARTMENT_VALIDATION_REGEX) 
              && test.endsWith("Management") 
              && !test.equals("Management");
}

如果您认为需要更复杂的检查,您还可以将部门验证正则表达式更改为:

public static final String DEPARTMENT_VALIDATION_REGEX = "(\\p{Alnum}+ )+Management";

public static boolean isValidDepartment(String test) {
  return test.matches(DEPARTMENT_VALIDATION_REGEX);
}

请注意,由于您使用了 \\p{Alnum},因此仍然允许“管理 Management”“M8n8g3m3nt Management”。如果您只需要字母字符 使用\\p{Alpha}。如果您想捕获“管理管理”的异常,您可能需要这样做:

public static boolean isValidDepartment(String test) {
  return test.matches(DEPARTMENT_VALIDATION_REGEX) 
              && !test.equals("Management Management");
}

您应该能够通过正则表达式完成所有操作,但可能会变得过于复杂且难以阅读,因为您可以使用 .equals() 轻松检查一个异常。

关于java - 如何确保字符串具有特定格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52735418/

相关文章:

c - 如何从命令行参数读取字符后的字符?

java - 如何在 Eclipse 本身中运行 Spring Boot Web 应用程序?

java - ActiveMQ无法启动,抛出SQLSyntaxException

C - fgets() - 如果字符串更长怎么办?

javascript - 将整数转换为字节串

javascript - 如何在 JavaScript 中巧妙地 chop HTML 字符串?

java - 骡子 ESB : xml to maps transformer produces empty hashmaps

java - 如何摆脱用户尝试打开 Excel 电子表格时显示的警告消息?

java - 线程 "main"中的异常 org.hibernate.HibernateException : Error accessing stax stream

c++ - 删除 '\n.\n' C++