kkokowaah
槐序听雨声
采纳率100%
2021-02-22 23:32

如何判断输入的字符串是字母或数字?(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; //返回检查数据
}

感谢任何帮助和回答!谢谢!

 

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • huanhuilong 幻灰龙 2月前

    你的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; 
    }
    点赞 2 评论 复制链接分享
  • weixin_37519752 键盘行者 2月前

    给你个更简单的

    	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) ;
    	}
    
    点赞 3 评论 复制链接分享
  • vbhfdghff hweiyu00 2月前
        public static boolean test(String str) {
            return null != str && Pattern.matches("^[0-9a-zA-Z]+$", str);
        }
    点赞 评论 复制链接分享

为你推荐