欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javaSE基础介绍之集合和IO流

程序员文章站 2022-09-26 22:19:35
1.有一个接口,此接口中提供了注册方法,我们注册时只限定账号的长度,和账号是否已经存在,其他不用限定,长度限定自己开心就好2.然后有一个功能类想要实现注册功能,需要实现这个接口,然后对注册方法进行功能实现3.每个用户注册功能限定使用三次,超过三次还没有注册成功,就自动退出,4.每注册成功一个用户,就将用户保存在集合中,可以选择是否继续注册,如果不注册,就跳出循环,如果注册,就可以继续循环5.然后再将集合中所有的用户的信息保存在文件上,保存格式如下:每个用户占用一行 账号 密码 手机号等列头...

1.有一个接口,此接口中提供了注册方法,我们注册时只限定账号的长度,和账号是否已经存在,其他不用限定,长度限定自己开心就好

2.然后有一个功能类想要实现注册功能,需要实现这个接口,然后对注册方法进行功能实现

3.每个用户注册功能限定使用三次,超过三次还没有注册成功,就自动退出,

4.每注册成功一个用户,就将用户保存在集合中,可以选择是否继续注册,如果不注册,就跳出循环,如果注册,就可以继续循环

5.然后再将集合中所有的用户的信息保存在文件上,保存格式如下:
每个用户占用一行 账号 密码 手机号等列头 一定要有

账号        密码        手机号 

代码如下.

package day14.test0815; import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /**
 * 账号注册Demo
 1.根据要求新建接口,里面只有一个抽象的注册方法,随后根据需要再决定这个方法的参数列表 让测试类实现这个接口
 2.创建用户类 成员变量是用户的账号 密码 手机号
 3.创建一个hashMap用于存储注册的账号和其他信息.账号作为键,为了确保账号不会重复,每次运行都需要把文件中的账号信息读入此集合中
 4.调入注册方法,写进循环里,为了方便之后判断是否继续注册
 5.写注册方法,在方法里写输入账号的循环
 6.判断账号无误后,分别写输入密码和输入手机号的循环
 7.所有信息无误就将信息存入User对象,再将账号和User对象存入hashMap 结束方法
 8.写是否继续注册的判断
 */ public class TestDemo1 implements reg{ public static void main(String[] args) throws Exception { File file = new File("d:/account.txt"); //存储账号信息的文件 HashMap<String, User> accounts = new HashMap<>();//存储账号密码的集合 Scanner scanner = new Scanner(System.in); TestDemo1 testDemo1 = new TestDemo1(); //创个测试类对象才能调用本类方法 if (file.length()==0){ //如果文件是空的就把标头写入文件 FileWriter fileWriter = new FileWriter(file,true); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write("账号"+"\t\t"+"密码"+"\t\t"+"手机号"); bufferedWriter.newLine(); bufferedWriter.close(); } //将account.txt文件中的账号信息读入accounts集合 String line; FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); long skip = bufferedReader.skip(13); //跳过文件的标头 while ((line=bufferedReader.readLine())!=null){ //            System.out.println(line); String[] split = line.split("\\s"); //将读到的每行字符串用空白字符割分 User user = new User(split[0],split[1],split[2]); accounts.put(split[0],user); } a:do { testDemo1.register(accounts,file); //调用注册方法 for (Map.Entry<String, User> entry : accounts.entrySet()) { //打印account集合里的信息 User u = entry.getValue(); System.out.println("[账号:"+entry.getKey()+"\t信息:"+u.getUsername()+"\t"+u.getPassword()+"\t"+u.getPhone()+"]"); } b:do{ //判断是否继续注册 System.out.println("是否继续注册?(y/n)"); String i = scanner.next(); String s = i.toLowerCase().trim(); if (s.equals("n")) { System.out.println("一路走好"); break a; //输入n就结束注册循环 } else if (s.equals("y")) { break; //输入y就跳出是否继续注册的判断,从头调用注册方法 } else { System.out.println("输入有误 请重新选择:"); //输入别的字符串就重新输入 } }while (true); }while (true); } /**
     * 注册方法  将注册成功的用户信息存入account.txt
     * @param accounts
     * @param file
     * @throws Exception
     */ @Override public void register(HashMap<String, User> accounts,File file) throws Exception{ int times = 0 ; //用于判断是否注册失败了3次 Scanner scannerA = new Scanner(System.in); System.out.println("欢迎注册"); System.out.println("请输入您的用户名(最小长度为8 最大长度为15):"); do { //输入账号 String sA = scannerA.nextLine().trim(); //账号字符串 if (sA.length() > 7 && sA.length() < 16 && !accounts.containsKey(sA)) {// 如果账号在长度之内且尚未存在 输入密码 String sP; do { //输入密码 System.out.println("请输入密码(最小长度为8 最大长度为15)"); Scanner scannerP = new Scanner(System.in); sP = scannerP.nextLine().trim(); //密码字符串 }while (sP.length() < 8 || sP.length() > 15); //输入手机号 String sN; //手机号字符串 System.out.println("请输入手机号:"); do { Scanner scannerN = new Scanner(System.in); sN = scannerN.nextLine().trim(); if (!isMobileNO(sN)) { //如果手机号不合法打印提示 System.out.println("请重新输入手机号:"); } } while (!isMobileNO(sN)); //如果手机号不合法就继续循环输入 User user = new User(sA, sP, sN); //创建用户对象 accounts.put(sA, user); //将该用户保存在hashmap中 //将此次注册的账号信息写入account.txt文件 FileWriter fileWriter = new FileWriter(file,true); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write(sA+"\t"+sP+"\t"+sN); bufferedWriter.newLine(); bufferedWriter.close(); System.out.println("注册成功!"); return; } System.out.println("账号不合法"); }while (times++<2);//如果次数超过3次就跳出循环 System.out.println("失败超过三次,请您过段时间再来吧"); } /**
     * 验证手机号码
     * @param mobiles
     * @return
     */ public static boolean isMobileNO(String mobiles){ boolean flag = false; try{ Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); Matcher m = p.matcher(mobiles); flag = m.matches(); }catch(Exception e){ flag = false; } return flag; } } 
package day14.test0815; public class User { private String username; private String password; private String phone; public User() { } public User(String username, String password, String phone) { this.username = username; this.password = password; this.phone = phone; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", phone='" + phone + '\'' + '}'; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } } 
package day14.test0815; import java.io.File; import java.util.HashMap; public interface reg { void register(HashMap<String, User> accounts, File file) throws Exception; } 

PS:BufferedReader真好用.

本文地址:https://blog.csdn.net/weixin_44855583/article/details/108028307

相关标签: javaSE java