如何判断输入的字符串是字母或数字?(JAVA)

编程萌新,最近写了一段代码,想判断从控制台输入的字符串是否符合规范。

但是我写的代码总是只记录最后一个字符的测试结果(也就是说如果我输入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);
    }