3.145 2021-05-18 16:23 采纳率: 33.3%
浏览 45

修改集合中的覆盖原内容的问题(使其往后添加内容)?

在文件student.txt中存在以下信息:

  1. 英雄班|项羽@蒙恬@霍去病@卫青@岳飞$枭雄班|勾践@朱元璋@朱温@高欢@曹操$

      班级与班级之间用$隔开   

      学生和班级之间用|隔开

       学生与学生之间用@隔开

       表示英雄班有学生项羽,蒙恬,霍去病,卫青,岳飞

实现以下需求:

  1. 将读取到的数据保存到map集合中,key表示班级,value表示该班学生集合
  2. 实现添加功能:
      1. 要求键盘录入;
      2. 先录入班级名,如果班级存在,提示班级已存在,继续录入学生姓名;如果班级不存在,在map集合中添加新的班级信息。
      3. 每录入一个学生后,提示是否继续,如果是Y,继续录入;如果是N,那就不要录入;如果是其他,提示输入不正确,从新输入Y和N。
      4. 学生姓名不可重复。
      5. 将最新的班级信息按照格式回写入student.txt文件中
  3. 正确定义map集合存储班级和学生(10分)
  4. 正确创建输入流对象(10分)
  5. 正确切割出班级和学生(10分)
  6. 将读取到的信息保存到集合中(10分)
  7. 遍历集合,将班级信息打印控制台(10分)
  8. 正确实现键盘录入功能(5分)
  9. 正确判断班级是否存在,实现2)b)功能(10分)
  10. 正确添加学生并去重(10分)
  11. 正确创建输出流对象 (5分)
  12. 实现班级学生信息的拼接(例如:英雄班|项羽@蒙恬@霍去病@卫青@岳飞$)(10分)
  13. 将录入的班级信息写入到student.txt文件中(5分)
  14. 其他编程规范(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("写入文件成功");
        }
    }
    
    ​
  • 写回答

1条回答 默认 最新

  • 久绊A 全栈领域新星创作者 2023-01-30 15:34
    关注

    修改集合中的覆盖原内容的问题(使其往后添加内容)???

    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示