一、任务描述: 假设当用户输入用户名、密码、确认密码,生日(输入格式必须为 yyyy-mm-dd)、手机号码(长度为11位,并且以13,15,17或者18开头)、邮箱(包含字符 @)、信息之后,判断信息输入是否正确,
如果正确,验证用户是否重复注册,
如果不是重复注册则注册成功,
如果失败则输出"注册结果:用户重复"
二、运行结果:
文章图片
三、实现思路:
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集合)】
推荐阅读
- java编程|CQRS/EventSoucring和Spring结合Axon教程
- 自定义Mybatis的拦截器
- Netty 4.x 用户指南
- Android开发|Exoplayer Developer guide官方文档译文
- java的system.arraycopy()方法
- Java编程|如何在ubuntu提高jdk版本
- c3po.properties
- 三个线程顺序执行依次输出123123123.....
- java编程|java cas 单点登录web.xml配置