编程萌新,最近写了一段代码,想判断从控制台输入的字符串是否符合规范。
但是我写的代码总是只记录最后一个字符的测试结果(也就是说如果我输入Hello%$ 就会返回false,但是如果我输入He%$llo就会返回True)。
想请教一下各位前辈们,如何写才能做到检查字符串中每一个字符后再返回整体结果?
以下是我写的代码:
public static boolean check(String str) { char[] c = str.toCharArray(); //把字符串转换成char,逐一检查 boolean cCheck = false; for (int i = 0; i < c.length; i++) { char a = c[i]; if (a >= 'a' && a <= 'z') { //检查是否在小写字母范围 cCheck = true; } else if (a >= 'C' && a <= 'Z') { //检查是否在大写字母范围 cCheck = true; } else if (a >= '0' && a <= '9') { //检查是否是数字 cCheck = true; } else { cCheck = false; //如果都不是则返回false } //System.out.println(c[i]); } return cCheck; //返回检查数据 }
感谢任何帮助和回答!谢谢!
你的cCheck每次进入循环都会被设置一次,最后一次进入循环的是个字母就会最后一次设置为true,这样就导致你观察到的想象。
解决办法:如果遇到第一个不符合要求的就返回false;
public static boolean check(String str) {
char[] c = str.toCharArray(); //把字符串转换成char,逐一检查
boolean cCheck = false;
for (int i = 0; i < c.length; i++) {
char a = c[i];
if (a >= 'a' && a <= 'z') { //检查是否在小写字母范围
cCheck = true;
} else if (a >= 'C' && a <= 'Z') { //检查是否在大写字母范围
cCheck = true;
} else if (a >= '0' && a <= '9') { //检查是否是数字
cCheck = true;
} else {
// 这里直接返回false,不再继续判断后续字符
return false; //如果都不是则返回false
}
//System.out.println(c[i]);
}
return cCheck; //返回检查数据
}
进一步,并不需要nCheck变量:
public static boolean check(String str) {
char[] c = str.toCharArray(); //把字符串转换成char,逐一检查
for (int i = 0; i < c.length; i++) {
char a = c[i];
boolean isLowercaseAlpha = a >= 'a' && a <= 'z';
boolean isUppercaseAlpha = a >= 'C' && a <= 'Z';
boolean isInt = a >= '0' && a <= '9';
if ( isLowercaseAlpha || isUppercaseAlpha || isInt) {
// 大小写字母或者整数
} else {
// 遇到第一个不符合要求的字符,返回false
return false;
}
}
// 这里一定都是符合要求的字符,返回true
return true;
}
给你个更简单的
public static boolean check(String str) {
//匹配所有正整数 ^[0-9]+$
//匹配所有正负整数 ^-?[1-9]\\d*$
//匹配所有数的正则 ^[+-]?(0|([1-9]\d*))(\.\d+)?$
String num_regex = "^[+-]?(0|([1-9]\\d*))(\\.\\d+)?$", letter_regex = "^[a-z-A-Z]+$";
return str.matches(num_regex) || str.matches(letter_regex) ;
}
public static boolean test(String str) {
return null != str && Pattern.matches("^[0-9a-zA-Z]+$", str);
}