有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java验证字符串输入的部分,以确保为某些索引输入字母或数字

撇开愚蠢的标题不谈,我很难验证输入值“MBA222”时是不允许的,而像“MB2222”这样的值是允许的。也就是说,我不确定如何确保字符串的前两个字符是字母,后四个是数字。我是不是用错了方法

public static String getValidMembership(String aMember){

    while(isValidMembership(aMember) == false){
        aMember = JOptionPane.showInputDialog("Please enter Membership Number");
    }
    return aMember;
}

private static boolean isValidMembership(String aMember){
    boolean result = false;

    //TODO add your code here
    try{
        if(!aMember.substring(0,1).contains("[a-zA-Z]+") &&
            !aMember.substring(2,5).contains("[0-9]+")&&
            aMember.length() != 6){
            result = false;

        }
        else{
            result = true; 
        }
    }catch(Exception e){
        result = false; 
    }
    return result;
}

共 (2) 个答案

  1. # 1 楼答案

    下面是isValidMembership()方法的一个优雅而精巧的实现:

    private static boolean isValidMembership(String aMember){
        if (aMember.replaceFirst("([a-zA-Z]{2}[0-9]{4})", "").length() != 0) {
            return false;
        }  
    
        return true;
    }
    

    我删除了你的try-catch块,因为它似乎没有必要

    此解决方案使用以下正则表达式,您也可以通过以下链接进行测试:

    [a-zA-Z]{2}[0-9]{4}
    

    Regex101

    请注意,这个正则表达式将匹配两个字母和四个数字,但Java代码施加了额外的约束,即字符串的长度必须为6

  2. # 2 楼答案

    你只需要一个正则表达式:

    public static boolean isValidMembership(String aMember) {
        return Pattern.matches("^[a-zA-Z]{2}\\d{4}$", aMember);
    }
    

    我建议阅读Javadoc for the Pattern class,它提供了很多关于如何使用正则表达式的细节