Java 从模式中注册无效数据段

Java 从模式中注册无效数据段,java,string,boolean,Java,String,Boolean,我需要使用一个六个字母的单词,如果它有一个字母数字序列,那么它将是一个有效的数据段。否则,它将被视为无效。我的代码的问题是,它总是以有效的方式运行。这是我的密码: vstatus=false; char a=pcode.charAt(0); char b=pcode.charAt(1); char c=pcode.charAt(2); char d=pcode.charAt(3); char e=p

我需要使用一个六个字母的单词,如果它有一个字母数字序列,那么它将是一个有效的数据段。否则,它将被视为无效。我的代码的问题是,它总是以有效的方式运行。这是我的密码:

        vstatus=false;

        char a=pcode.charAt(0);
        char b=pcode.charAt(1);
        char c=pcode.charAt(2);
        char d=pcode.charAt(3);
        char e=pcode.charAt(4);
        char f=pcode.charAt(5);

        if(!Character.isLetter(a)) vstatus=true;
        if(!Character.isDigit(b)) vstatus=true;
        if(!Character.isLetter(c)) vstatus=true;
        if(!Character.isDigit(d)) vstatus=true;
        if(!Character.isLetter(e)) vstatus=true;
        if(!Character.isDigit(f)) vstatus=true;

        if (vstatus=true)
        {
            System.out.println(convertUpperCase(pcode)+" is a valid postal code");
        }
        if (vstatus=false) 
        {
            System.out.println(convertUpperCase(pcode)+" is not a valid postal code");
        }

在您的代码中,即使一个字符是正确的,而所有其他字符都是错误的,您也可以使其成为真的。您需要确认所有字符都是正确的。使用
&&

String pcode = "i8i8i8";

char a=pcode.charAt(0);
char b=pcode.charAt(1);
char c=pcode.charAt(2);
char d=pcode.charAt(3);
char e=pcode.charAt(4);
char f=pcode.charAt(5);

if (Character.isLetter(a) && Character.isDigit(b) && Character.isLetter(c) && Character.isDigit(d) && Character.isLetter(e) && Character.isDigit(f)) {
    System.out.println("valid");
} else {
    System.out.println("not a valid postal code");
}

或者,在循环中:

String pcode = "i8i8i8";
boolean flag = true;

for (int i = 0; i < pcode.length(); i++) {
    if (!(i % 2 == 0 && Character.isLetter(pcode.charAt(i)) || Character
        .isDigit(pcode.charAt(i)))) {
        flag = false;
    }
}

if (flag) { System.out.println("valid"); } 
else { System.out.println("not valid"); }

最后,

您可以使用此正则表达式:

String r = [A-Za-z][\d][A-Za-z][\d][A-Za-z][\d]
if (pcode.matches(r)) {
    // valid
} else {
    // invalid
}

5种不同的方法,选择一种最适合您的方法。

这将是针对您的问题的较短代码:

    String pcode = "aza2a3";
    String regex = "[A-Za-z]{1}[\\d]{1}[A-Za-z]{1}[\\d]{1}[A-Za-z]{1}[\\d]{1}";
    boolean matches = pcode.matches(regex);
    System.out.println(matches);

如果字符串的格式符合要求,则matches为true;如果我与所需字符串不匹配,则matches为false。您当前设置了
vstatus=true
,如果有任何通过。您需要使用
&&
检查所有条件。假设有效似乎更为自然,如果任何验证失败,您可以设置
vstatus=false
(给定当前结构)。不相关,但请注意,通过调试器和/或“玩电脑”使用铅笔和纸张进行简单的日志记录和/或单步操作就足以调试此功能。
String r = [A-Za-z][\d][A-Za-z][\d][A-Za-z][\d]
if (pcode.matches(r)) {
    // valid
} else {
    // invalid
}
    String pcode = "aza2a3";
    String regex = "[A-Za-z]{1}[\\d]{1}[A-Za-z]{1}[\\d]{1}[A-Za-z]{1}[\\d]{1}";
    boolean matches = pcode.matches(regex);
    System.out.println(matches);