Java基础案例教程 第六章集合类———【任务6-2】模拟新浪微博用户注册 (HashSet集合)

一、任务描述: 假设当用户输入用户名、密码、确认密码,生日(输入格式必须为 yyyy-mm-dd)、手机号码(长度为11位,并且以13,15,17或者18开头)、邮箱(包含字符 @)、信息之后,判断信息输入是否正确,
如果正确,验证用户是否重复注册,
如果不是重复注册则注册成功,
如果失败则输出"注册结果:用户重复"

二、运行结果: Java基础案例教程 第六章集合类———【任务6-2】模拟新浪微博用户注册 (HashSet集合)
文章图片



三、实现思路: 1、class User
用户注册需要实现用户对象,新建User类,
封装成员变量,
空参构造方法,含参构造方法
用户不能重复,使用HashCode集合存储
重写hashCode() ,equals(),用userName作为判断条件
2、class UserRegister
用户注册具体实现类,即测试类
新建 Hash集合,存放User对象
初始化哈希数组,已有2位用户
输出注册提示语句,
新建checkInfo对象,调用checkAction()方法

3、class checkInfo
class内需要构造方法,被调用的是类内函数
获取字符串某个指定字符

char ch=birthday.charAt(i);

判断某个字符是否是数字
Character.isDigit(ch)

判断字符串是否以某个子字符串开头
phoneNumber.startsWith("13")

字符窜内是否包含某个指定字符
email.contains("@")

String--->Date
DateFormat format=new SimpleDateFormat("yyyy-mm-dd"); //定义日期格式//会报错,自动生成try catch //Date dateBirthday = format.parse(birthday); Date dateBirthday=null; try { dateBirthday = format.parse(birthday); } catch (ParseException e) { e.printStackTrace(); }

四、实现代码:
package cn.itcast.task02; import java.util.Date; /** * @author wangyue * @version 1.0 * @date 2019/6/26 13:52 * @describe: 用户类,封装用户参数 */ public class User { private String userName; private String password; private Date birthday; private String phoneNumber; private String email; public User() { }public User(String userName, String password, Date birthday, String phoneNumber, String email) { this.userName = userName; this.password = password; this.birthday = birthday; this.phoneNumber = phoneNumber; this.email = email; }//重写hashCode() 根据用户名判断 @Override public int hashCode() { return userName.hashCode(); }// 重写equals() , 判断对象是否重复 @Override public boolean equals(Object o) { if (this == o)//是否为同一个对象 return true; if (o == null || getClass() != o.getClass())//新对象为空 或者 不是User类型 return false; User user = (User) o; return userName.equals(user.userName); } }


package cn.itcast.task02; import java.util.Date; import java.util.HashSet; import java.util.Scanner; /** * @author wangyue * @version 1.0 * @date 2019/6/26 16:04 * @describe: 用户注册具体实现类,即测试类 */ public class UserRegister { public static HashSet USER_DATA = https://www.it610.com/article/new HashSet(); //静态变量用全大写public static void main(String[] args) { //初始化哈希数组 initData(); Scanner sc = new Scanner(System.in); System.out.print("请输入用户名:"); //we String userName = sc.nextLine(); System.out.print("请输入密码:"); String password = sc.nextLine(); System.out.print("请重复密码:"); String rePassword = sc.nextLine(); System.out.print("出生日期:"); //1999-09-08 String birthday = sc.nextLine(); System.out.print("手机号码:"); //13515544146 String phoneNumber = sc.nextLine(); System.out.print("电子邮箱:"); //123@qq String email = sc.nextLine(); CheckInfo checkInfo = new CheckInfo(USER_DATA); String resault = checkInfo.checkAction(userName, password, rePassword, birthday, phoneNumber, email); System.out.println(resault); }private static void initData() { User user1 = new User("liming", "li123", new Date(), "13515544146", "123@qq.com"); User user2 = new User("chenyang", "chen123", new Date(), "13515544146", "123@qq.com"); USER_DATA.add(user1); USER_DATA.add(user2); System.out.println("已初始化,当前用户有:" + USER_DATA.size() + "位"); }}


package cn.itcast.task02; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashSet; /** * @author wangyue * @version 1.0 * @date 2019/6/26 16:55 * @describe: 检验数据 */ public class CheckInfo { //用户数据 public static HashSet USER_DATA; //构造方法 public CheckInfo(HashSet USER_DATA) { this.USER_DATA = https://www.it610.com/article/USER_DATA; }//自定义方法,判断某字符串你是否全为数字override不熟悉??? public static boolean isDigit(String str) { for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (!Character.isDigit(ch)) { return false; } } return true; }//验证方法,得到注册的结果 public String checkAction(String userName, String password, String rePassword, String birthday, String phoneNumber, String email) {int state = 1; StringBuilder resault = new StringBuilder("注册结果:"); //不知道为什么用这个???//1、检查 password if (!rePassword.equals(password)) {//比较字符串内容用equals, 比较是否是同一个对象,用“==” state = 2; resault.append("两次输入密码不一致!\r\n"); }//2、检查 birthday长度,除了两个“-”,其他都是数字1999-02-12 if (birthday.length() == 10) { //检查长度 for (int i = 0; i < birthday.length(); i++) { char ch = birthday.charAt(i); if (i == 4 || i == 7) {//检查连接符 if (ch != '-') { state = 2; resault.append("生日格式不正确 \r\n"); } } else {//判断全是除了第4位和第7位,是否全是数字 if (!Character.isDigit(ch)) { state = 2; resault.append("生日格式不正确\r\n"); } }} } else {//日期字符串长度不为10 state = 2; resault.append("生日格式不正确 \r\n"); }//3、检查 phoneNumber if (phoneNumber.length() == 11) { //检查长度 if (phoneNumber.startsWith("13") || phoneNumber.startsWith("15") || phoneNumber.startsWith("18")) {//检查开头 if (!isDigit(phoneNumber)) { //检查是否全为数字 state = 2; resault.append("手机号码格式不正确 \r\n"); } } else { state = 2; resault.append("手机号码格式不正确 \r\n"); }} else { state = 2; resault.append("手机号码格式不正确 \r\n"); }//4、检查 email if (!email.contains("@")) { state = 2; resault.append("邮箱格式不正确 \r\n"); }//数据没问题,添加进数组 if (state == 1) { //string 转换成 DATE DateFormat format = new SimpleDateFormat("yyyy-mm-dd"); //定义日期格式 Date dateBirthday = null; try { dateBirthday = format.parse(birthday); } catch (ParseException e) { e.printStackTrace(); }User user = new User(userName, password, dateBirthday, phoneNumber, email); if (USER_DATA.add(user)) { resault.append("注册成功"); } else { resault.append("用户重复"); } } return resault.toString(); }}



【Java基础案例教程 第六章集合类———【任务6-2】模拟新浪微博用户注册 (HashSet集合)】

    推荐阅读