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);