邮箱验证—Java循环条件判断练习题

发布于:2022-07-26 ⋅ 阅读:(524) ⋅ 点赞:(0)

邮箱验证

电子邮件(E-mail)是雷·汤姆林森于1971年对已有的传输文件程序以及信息程序进行研究,研制出一套程序。

在网络中,电子邮箱可以自动接收网络任何电子邮箱所发的电子邮件,并能存储规定大小的等多种格式的电子文件。电子邮箱具有单独的网络域名,其电子邮局地址在@后标注,电子邮箱一般格式为:用户名@域名。

验证用户邮箱的合法性,用户邮箱必须满足以下规则:

  1. 格式:name@host;
  2. name只能由字母、数字、下划线组成;
  3. 且name只能以字母开头至少包含大写字母、小写字母、数字、下划线中的三种;
  4. host中必须包含字符“.”,且“.”不能在host部分的两头;
    在这里插入图片描述

思路梳理

  1. 使用String类方法Split()将邮箱以“@”符为界分为两个字符串.
  2. 先分析name部分的要求,再分析host部分,将问题简单化.
  3. 将需要用的方法一一写在下方,比如是否含大写字母、是否含数字……
  4. 写出总的判断方法,其中调用已经写好的是否含有大写字母、数字等方法,以不符合条件返回false为主思路,最后返回true.

在这里插入图片描述

验证用户邮箱案例实现代码:

package cn.maidaotech.java10.chapter02;

//验证邮箱是否符合规则:name @ host,      
//满足以下所有规则:                               
//name只能由字母、数字、下划线组成;                   
//只能以字母开头

//至少包含大写字母、小写字母、数字、下划线中的三种

//host中必须包含字符“.”,
//且“.”不能在host部分的两头
public class Email {

    public static void main(String[] args) {

        // System.out.println(checkEmail("wang123_@bin.g") ? "合法" : "不合法");
        System.out.println(checkEmail("wang123@bing.cn") ? "合法" : "不合法");
        // System.out.println(checkEmail("a_1a1@1.0") ? "合法" : "不合法");

    }

    private static boolean checkEmail(String s) {
        isAt(s);
        s.split("@");
        String[] two = s.split("@");
        if (two.length < 2) {
            return false;
        }

        String name = two[0];
        String host = two[1];

        int judgeNum = 0;
        if (hasLowerCase(name)) {
            judgeNum += 1;
        }
        if (hasUnderline(name)) {
            judgeNum += 1;
        }
        if (hasNumber(name)) {
            judgeNum += 1;
        }
        if (hasUpperCase(name)) {
            judgeNum += 1;
        }

        if (judgeNum < 3) {
            return false;
        }

        if (!isLetter(name.charAt(0))) {
            return false;
        }

        for (int i = 0; i < name.length(); i++) {
            char nameChar = name.charAt(i);

            // name是字母和数字下划线
            if (!isLetter(nameChar) && !isnumber(nameChar) && nameChar != '_') {
                return false;
            }
        }

        char statr = host.charAt(0);
        char end = host.charAt(host.length() - 1);

        if (!host.contains(".")) {
            return false;
        }

        if (statr == '.' || end == '.') {
            return false;
        }

        return true;
    }

    // 字符串中是否含有@符号
    private static boolean isAt(String s) {
        if (s.contains("@")) {
            return true;
        }
        return false;
    }

    // 是不是大写字母
    private static boolean isUpperCase(char c) {
        if (c >= 'A' && c <= 'Z') {
            return true;
        }
        return false;
    }

    // 是不是小写字母
    private static boolean isLowerCase(char c) {
        if (c >= 'a' && c <= 'z') {
            return true;
        }
        return false;
    }

    // 是不是大小写字母
    private static boolean isLetter(char c) {
        if (isLowerCase(c) || isUpperCase(c)) {
            return true;
        }
        return false;
    }

    // 是不是数字
    private static boolean isnumber(char c) {
        if (c >= '0' && c <= '9') {
            return true;
        }
        return false;
    }

    // 包含下划线
    private static boolean hasUnderline(String s) {

        if (s.contains("_")) {
            return true;
        }

        return false;
    }

    // 包含数字
    private static boolean hasNumber(String s) {
        for (int i = 0; i < s.length(); i++) {
            char cc = s.charAt(i);

            if (isnumber(cc)) {
                return true;
            }
        }
        return false;
    }

    // 包含小写字母
    private static boolean hasLowerCase(String s) {
        for (int i = 0; i < s.length(); i++) {
            char cc = s.charAt(i);

            if (isLowerCase(cc)) {
                return true;
            }
        }
        return false;
    }

    // 包含大写字母
    private static boolean hasUpperCase(String s) {
        for (int i = 0; i < s.length(); i++) {
            char cc = s.charAt(i);

            if (isUpperCase(cc)) {
                return true;
            }
        }
        return false;
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到