解析都在代码块上
定义邮箱类MailBox,属性:(name,名称),(suffix,后缀),toString()方法输出完整的邮箱:name+”@“+suffix。
定义数据操作工具类DataUtil,定义方法一邮箱校验boolean checkData(String mail),判断邮箱是否符合规则:字母(大写或者小写)开头+中间5到17位+@163 | qq.com结尾。定义方法二saveData(List<MailBox> list1,List<MailBox> 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<MailBox> list1, List<MailBox> 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<MailBox> 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<MailBox> list1 = new ArrayList<>();
static List<MailBox> 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
}
}