模拟新浪微博用户注册

任务要求

编写一个模拟新浪微博用户注册的程序,要求使用HashSet 集合实现。假设当用户输入用户名、密码、确认密码、生日(输入格式为 yyyy-mm-dd 为正确)、手机号码(手机号长度为11位,并且以13、15、17或18为开头的手机号位为正确)、邮箱(包含符号“@”为正确)信息之后,判断信息输入是否正确,正确验证用户是否重复注册,如果不是重复注册则注册成功。例如,用户信息列表中已经存在用户“张正”,当张正再次注册时,则输出“注册结果:用户重复!”。


预期结果


思路

假设当用户输入用户名、密码、确认密码、生日(输入格式为 yyyy-mm-dd 为正确)、手机号码(手机号长度为11位,并且以13、15、17或18为开头的手机号位为正确)、邮箱(包含符号“@”为正确)信息之后,判断信息输入是否正确,正确验证用户是否重复注册,如果不是重复注册则注册成功。例如,用户信息列表中已经存在用户“张正”,当张正再次注册时,则输出“注册结果:用户重复!”。


一:判断生日的格式是否为yyyy-mm-dd

用SimpleDateFormat类型,在创建该实例的时候传入你要的日期格式即可

然后调用该类的parse(your_date)方法判断,是否符合预期

if用户的输入格式错误那么提示重新输入

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateValidator {
    private static final String DATE_FORMAT = "yyyy-MM-dd";

    public static boolean isValidBirthDate(String dateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        try {
            // 尝试将字符串转换为日期
            sdf.parse(dateStr);
            return true; // 如果没有抛出异常,则认为格式正确
        } catch (ParseException e) {
            return false; // 抛出异常说明格式不正确
        }
    }

    // 使用示例:
    public static void main(String[] args) {
        String birthDate = "1990-12-31";
        boolean isValid = isValidBirthDate(birthDate);
        if (isValid) {
            System.out.println("输入的日期格式正确");
        } else {
            System.out.println("输入的日期格式错误");
        }
    }
}

二:判断手机号长度是否为11位,且要以13、15、16、17、18开头

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class PhoneNumberValidator {

    public static boolean isMobileNO(String mobile) {
        String regex = "^1[3-9]\\d{9}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(mobile);
        return matcher.matches();
    }

    // 使用示例:
    public static void main(String[] args) {
        String testNumber = "13800138000";
        if (isMobileNO(testNumber)) {
            System.out.println("手机号码格式正确");
        } else {
            System.out.println("手机号码格式错误");
        }
    }
}

上述代码中,正则表达式"^1[3-9]\\d{9}$"的含义如下:

  • ^ 表示匹配输入字符串的开始。
  • 1 表示第一位数字必须是1。
  • [3-9] 表示第二位数字必须在3到9之间。
  • \\d{9} 表示接下来有9位任意数字(在Java中需要使用双反斜杠\来转义特殊字符,所以写成\\d)。
  • $ 表示匹配输入字符串的结束。

因此,整个正则表达式会匹配11位的手机号码,其中前两位分别是1和3至9之间的任何一个数字。 


解释一下上面的几行代码:

Pattern pattern = Pattern.compile(regex);

compile() 方法是 Pattern 类的一个静态方法,它接收一个字符串参数(在这里是 regex),该字符串包含要匹配的正则表达式规则。这行代码的作用就是将你定义的正则表达式字符串转换为一个Pattern对象。你可以理解为一个正确的模板


1Matcher matcher = pattern.matcher(mobile);

matcher() 是 Pattern 类的一个实例方法,它返回一个新的 Matcher 对象。

这里的 mobile 参数是你想要验证的手机号码。它会验证手机号是否和规则匹配


1return matcher.matches();

最后,调用 Matcher 类的 matches() 方法。如果整个手机号码字符串完全符合我们之前定义的正则表达式规则,那么 matches() 方法会返回 true,否则返回 false


三:邮箱包含@

1public class Main {
2    public static void main(String[] args) {
3        String email = "example@example.com";
4        if (email.contains("@")) {
5            System.out.println("字符串中包含 '@' 符号,可能为邮箱地址");
6        } else {
7            System.out.println("字符串中不包含 '@' 符号");
8        }
9    }
10}

这段代码中的 contains 方法是 String 类的一个实例方法,它会检查该字符串中是否包含指定的字符序列(在这里是 "@" 符号)。如果包含,返回 true;否则返回 false


四:用户信息列表中已经存在用户“张正”,当张正再次注册时,则输出“注册结果:用户重复!”。

  将一个String类型用户名存入HashSet,重写equals方法,如果两个元素相同,则输出重复即可。

注意:这个问题害我搞了好久

    public boolean equals(Object obj) {//这里传入的obj是指谁?首先这个this是指新元素在被添加时调用了equals方法,那么这个this就是值新元素的新对象
        //这样理解对吗?那么当新元素调用了equals方法,他传入的obj是谁呢?难道是所有的老元素吗?
        //是的obj就是指所有的老元素。

        if (this == obj) {

            return true;
        }//这里的obj是如何做到代表了上一个对象的?

        //别看感叹号,把false改为true就好理解了
        if (!(obj instanceof User)) {

            return false;

        }

        User u = (User) obj;//执行这一步的意义?两个的值是一样的对吧,只是类型不一样,而且还是包含关系?
        //不是 obj代表的是上一个对象

        boolean b = this.name.equals(u.name);


        return b;//b如果是true那么HashSet。add方法收到的是false表示元素相同
    }

判断是否重复

    public void verify_user() {
        if (User_name.add(name)) {

            System.out.println("verify success");//添加用户完毕了,如何接着添加下一个用户?
            //把新建对象写进方法里面,添加完毕后再次调用这个对象。

        } else {
            
            System.out.println("verify failed");
            verify_user();
        }
    }

大概就是这样


完整代码

package JiaXinTest;

import com.google.common.base.Objects;

import javax.xml.namespace.QName;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class User {

    private String name;
    HashSet User_name = new HashSet();


    public User(String name) {

        this.name = name;

    }

    static Scanner scanner = new Scanner(System.in);

    String pwd;
    String pwd2;


    public static void main(String[] args) {

        System.out.println("请输入用户名");
        String name = scanner.nextLine();

        User user = new User(name);

        user.verifyPwd();

        user.date_of_birth();

        System.out.println("手机号码");
        String phoneN = scanner.nextLine();
        phoneN(phoneN);

        user.Email();

        user.verify_user();
    }

    public static void phoneN(String phoneN) {

        String regex = "^1[3-9]\\d{9}$";

        Pattern pattern = Pattern.compile(regex);//正则表达式如何传递和定义?

        Matcher matcher = pattern.matcher(phoneN);

        boolean result = matcher.matches();

        if (result) {

            System.out.println("phone ok");
        } else {

            System.out.println("your phoneN error");
            phoneN = scanner.nextLine();
            phoneN(phoneN);
        }


    }

    public void verifyPwd() {

        System.out.println("请输入密码");
        pwd = scanner.nextLine();

        System.out.println("请再次输入密码");
        pwd2 = scanner.nextLine();

        if (pwd.equals(pwd2)) {

            System.out.println("验证通过");

        } else {

            System.out.println("verify error");
            System.out.println("请再次输入密码");
            pwd2 = scanner.nextLine();
            verifyPwd();

        }


    }


    public void date_of_birth() {

        System.out.println("请输入您的出生日期");
        String date = scanner.nextLine();

        SimpleDateFormat format = new SimpleDateFormat("YY-MM-DD");

        try {
            format.parse(date);


        } catch (Exception E) {

            System.out.println("抱歉您输入的格式有误,请按照2002-08-25的格式输入日期");

            date_of_birth();

        }


    }


    public void Email() {

        System.out.println("请输入您的电子邮箱");
        String email = scanner.nextLine();

        if (email.contains("@")) {


        } else {

            System.out.println("您输入的电子邮箱有误,请重新输入");
            Email();
        }

    }

    public void verify_user() {
        if (User_name.add(name)) {

            System.out.println("verify success");//添加用户完毕了,如何接着添加下一个用户?
            //把新建对象写进方法里面,添加完毕后再次调用这个对象。

        } else {

            System.out.println("verify failed");
            verify_user();
        }
    }

    @Override
    public int hashCode() {
        return name.hashCode();
    }

    @Override
    public boolean equals(Object obj) {//这里传入的obj是指谁?首先这个this是指新元素在被添加时调用了equals方法,那么这个this就是值新元素的新对象
        //这样理解对吗?那么当新元素调用了equals方法,他传入的obj是谁呢?难道是所有的老元素吗?
        //是的obj就是指所有的老元素。

        if (this == obj) {

            return true;
        }//这里的obj是如何做到代表了上一个对象的?

        //别看感叹号,把false改为true就好理解了
        if (!(obj instanceof User)) {

            return false;

        }

        User u = (User) obj;//执行这一步的意义?两个的值是一样的对吧,只是类型不一样,而且还是包含关系?
        //不是 obj代表的是上一个对象

        boolean b = this.name.equals(u.name);


        return b;//b如果是true那么HashSet。add方法收到的是false表示元素相同
    }

    @Override
    public String toString() {
        return name;
    }
}





  • 40
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值