今天讲解的是实体类、正则、存储数据到文件、从文件里输出数据、集合的创建

解析都在代码块上

定义邮箱类MailBox,属性:(name,名称),(suffix,后缀),toString()方法输出完整的邮箱:name+”@“+suffix。

定义数据操作工具类DataUtil,定义方法一邮箱校验boolean checkData(String mail),判断邮箱是否符合规则:字母(大写或者小写)开头+中间5到17位+@163 | qq.com结尾。定义方法二saveData(List list1,List list2)将集合中的数据存入D盘data.txt文件中。定义方法三getData()读取D盘data.txt文件中的内容,存入集合并输出。

定义测试类,键盘循环录入邮箱,使用DataUtil判断格式是否匹配,如果匹配则截取@之前和之后的内容存入MailBox对象,后缀为163.com和qq.com的MailBox对象分别存入2个集合中,每个集合中至少存储了5个元素则循环结束。使用DataUtil类中的saveData()方法将2个集合中的数据存入文件中。使用DataUtil类中的getData()方法读取文件中的数据。

定义MailBox

 private String name,suffix; //创建属性  名称和后缀

    public MailBox() {//无参构造
    }
//有参构造
    public MailBox(String name, String suffix) {
        this.name = name;
        this.suffix = suffix;
    }
//get和setff
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSuffix() {
        return suffix;
    }

    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }
//toString方法  看题目要求
    @Override
    public String toString() {
        return  name + "@" + suffix ;
    }

创建实体工具类

package Day01;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class DataUtil {
    boolean checkData(String mail) {
        String a = "[a-zA-Z][a-zA-Z0-9]{5,17}@(qq|163)\\.com";//正则表达式
        if(mail.matches(a)){//判断正则是否匹配
            return true;//返回true
        }
        return false;//返回false
    }
//创建方法二 存储数据到文件
    void saveData(List list1, List list2) throws IOException {
        File f = new File("D:\\data.txt");
        f.createNewFile();//创建文件
        BufferedWriter bw = new BufferedWriter(new FileWriter(f));//创建高效字符输出流
        for (MailBox mailBox : list1) {//遍历
            bw.write(mailBox.toString());
            bw.newLine();
        }
        for (int i = 0; i < list2.size(); i++) {//遍历  两种方法遍历
            if (i == list2.size() - 1) {//当来到最后一个数据的是结束
                bw.write(list2.get(i).toString());
                break;
            } else {
                bw.write(list2.get(i).toString());//不是最后一个数据
                bw.newLine();//换行
            }
        }
        bw.close();//关流

    }
//创建方法三读取文件的数据
    void getData() throws IOException {
        BufferedReader br=new BufferedReader(new FileReader(new File("D:\\data.txt")));//创建高效字符输入流
        String a;
        List list=new ArrayList<>();
        while ((a=br.readLine())!=null){
            String[] arr1 = a.split("[@]");//分割@  arr1[0]:就是字母(大写或者小写)开头+中间5到17位   arr1[1]就是@163 | qq.com
            list.add(new MailBox(arr1[0],arr1[1]));//存到集合
        }
        br.close();//关流
        for (MailBox mailBox : list) {//遍历
            System.out.println(mailBox.toString());
        }
    }
}

创建测试类

package Day01;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test01 {
    static Scanner sc = new Scanner(System.in);
    static List list1 = new ArrayList<>();
    static List list2 = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        DataUtil a = new DataUtil();
        while (list1.size() != 5 | list2.size() != 5) {//至少存入5个数据
            System.out.println("请输入一个QQ号:");
            String name=sc.next();
            if (a.checkData(name)){
                String[] split = name.split("[@]");
                MailBox aa=new MailBox(split[0],split[1]);//
                if (aa.getSuffix().equals("qq.com")){//判断
                    list1.add(aa);//存入qq.com
                }else{
                    list2.add(aa);//存入163.com
                }
            }
        }
        a.saveData(list1,list2);//正确使用saveDataff
        a.getData();//正确使用getDataff
    }
}

你可能感兴趣的:(java)