在文件student.txt中存在以下信息:
- 英雄班|项羽@蒙恬@霍去病@卫青@岳飞$枭雄班|勾践@朱元璋@朱温@高欢@曹操$
班级与班级之间用$隔开
学生和班级之间用|隔开
学生与学生之间用@隔开
表示英雄班有学生项羽,蒙恬,霍去病,卫青,岳飞
实现以下需求:
- 将读取到的数据保存到map集合中,key表示班级,value表示该班学生集合
- 实现添加功能:
-
- 要求键盘录入;
- 先录入班级名,如果班级存在,提示班级已存在,继续录入学生姓名;如果班级不存在,在map集合中添加新的班级信息。
- 每录入一个学生后,提示是否继续,如果是Y,继续录入;如果是N,那就不要录入;如果是其他,提示输入不正确,从新输入Y和N。
- 学生姓名不可重复。
- 将最新的班级信息按照格式回写入student.txt文件中
-
- 正确定义map集合存储班级和学生(10分)
- 正确创建输入流对象(10分)
- 正确切割出班级和学生(10分)
- 将读取到的信息保存到集合中(10分)
- 遍历集合,将班级信息打印控制台(10分)
- 正确实现键盘录入功能(5分)
- 正确判断班级是否存在,实现2)b)功能(10分)
- 正确添加学生并去重(10分)
- 正确创建输出流对象 (5分)
- 实现班级学生信息的拼接(例如:英雄班|项羽@蒙恬@霍去病@卫青@岳飞$)(10分)
- 将录入的班级信息写入到student.txt文件中(5分)
- 其他编程规范(5分)
-
package New_QiMoTiKu.Q_4; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Scanner; import java.util.Set; public class Test { //创建map集合存储班级,学生 static HashMap<String, ArrayList<String>> map=new HashMap<>(); static Scanner sc=new Scanner(System.in); public static void main(String[] args) throws IOException { while (true){ System.out.println("请输入操作编号:"); System.out.println("1.读取文件 2.显示所有班级和学生信息 3.添加学生 4.写入文件 9.退出"); int in=sc.nextInt(); switch (in){ case 1: fun1(); break; case 2: fun2(); break; case 3: fun3(); break; case 4: fun4(); break; case 9: System.out.println("退出"); return; } } } public static void fun1() throws IOException { BufferedReader br=new BufferedReader( new FileReader("student.txt") ); String s=br.readLine(); br.close(); //分割 String[] str=s.split("\\$"); for (String s1 : str) { String[] str2=s1.split("\\|"); //班级 String ban=str2[0]; String[] str3=str2[1].split("\\@"); //学生录入ArrayList集合中 ArrayList<String> list=new ArrayList<>(); for (String s2 : str3) { list.add(s2); } map.put(ban,list); } System.out.println("读取成功!"); } public static void fun2(){ Set<String> keySet = map.keySet(); for (String key : keySet) { System.out.println(key); ArrayList<String> list1 = map.get(key); for (String s1 : list1) { System.out.println(" "+s1); } System.out.println("------------------"); } } public static void fun3(){ ArrayList<String> list=new ArrayList<>(); System.out.println("请输入班级名称:"); String ban=sc.next(); Set<String> keySet = map.keySet(); for (String key : keySet) { if (ban.equals(key)) { System.out.println("班级已存在,请直接输入学生姓名"); while (true) { System.out.println("请输入学生姓名:"); String name = sc.next(); if (list.contains(name)){ System.out.println("学生已经存在,请重新输入"); }else{ list.add(name); map.put(ban,list ); } System.out.println("是否继续? y继续 ,n录入完成"); String ji = sc.next(); if (ji.equals("y")) { continue; } else if (ji.equals("n")) { break; } } } else { while (true) { System.out.println("请输入学生姓名:"); String name = sc.next(); list.add(name); System.out.println("是否继续? y继续 ,n录入完成"); String ji = sc.next(); if (ji.equals("y")) { continue; } else if (ji.equals("n")) { break; } map.put(ban,list); } } } } public static void fun4() throws IOException { BufferedWriter bw=new BufferedWriter( new FileWriter("student.txt") ); Set<String> keySet = map.keySet(); for (String key : keySet) { bw.write(key+"|"); ArrayList<String> list = map.get(key); for (int i = 0; i < list.size(); i++) { if (i==list.size()-1){ bw.write(list.get(i)+"$"); }else{ bw.write(list.get(i)+"@"); } } bw.newLine(); } bw.close(); System.out.println("写入文件成功"); } }