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
    关注

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

    评论

    报告相同问题?

    悬赏问题

    • ¥50 vue-codemirror如何对指定行 指定位置的 字符进行背景颜色或者字体颜色的修改?
    • ¥15 有人会思科模拟器嘛?
    • ¥30 遇到一个的问题,请教各位
    • ¥20 matlab报错,vflux计算潜流通量
    • ¥15 我该如何实现鼠标按下GUI按钮时就执行按钮里面的操作的方法
    • ¥15 关于#硬件工程#的问题:我这边有个锁相环电路没有效果
    • ¥15 20款 27寸imac苹果一体机装win10后,蓝牙耳机和音响放歌曲卡顿断断续续.
    • ¥15 VB.NET 父窗体调取子窗体报错
    • ¥15 python海龟作图如何改代码使其最后画出来的是一个镜像翻转的图形
    • ¥15 我不明白为什么c#微软的官方api浏览器为什么不支持函数说明的检索,有支持检索函数说明的工具吗?