快来记录和她(他)的聊天吧,保留那份美好的回忆

    技术2022-07-13  86

    社交网模拟聊天记录

    一、题目

    程序员王大锤有一个非常喜欢的女神,为了保留和女神的各个瞬间,大锤想把他们的聊天信息(只保留文字)都保 存到自己本地系统,作为以后在一起的甜蜜回忆. 经过自己分析,他和女神聊天的信息库大致如下:

    =大锤常用语文件(大锤.txt):= 在么

    我给你发了一个红包

    好的

    =女神常用语文件(女神.txt):=

    正要去洗澡…

    正在吃饭…

    正在和朋友在一起

    谢谢,那我不客气了,你早点休息

    真的啊,大锤,你真好

    大锤你真棒 怎么了,

    不开心么

    …你怎么回事

    …是什么意思

    思路分析: 1.聊天记录由于是按行读取,建议使用缓冲字符流 2.女神的聊天记录会根据大锤的的聊天关键字,比如"在么",“红包”,"…",随机在自己三个里面选择回答 3.把大锤的说话当做K值,女神回答系统:Map<String,List>.每个list都是三个答案,根据大锤 的K得到List里面三个数据的一个随机数据 4.你作为大锤模拟输出关键字,检索女神回复信息,然后将聊天的每一行信息最终写入到本地answer.txt

    二、代码实现

    1.主界面

    package ChatHomeWork; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Scanner; import java.util.Set; public class Chat { static Scanner in = new Scanner(System.in); public static void main(String[] args) throws IOException { System.out.println("===欢迎来到社交网===="); System.out.println("===系统初始化中===="); System.out.println("请输入聊天的对象"); String name = in.nextLine(); //创建Map集合 Map<String, List<String>> map = showLog(); System.out.println(map); System.out.println("聊天开始"); System.out.println("聊天记录即将备份到文件,请输入文件名:"); //接收输入的文件名 String fileName = in.nextLine(); String me; //创建循环 while(true) { System.out.print("大锤:"); me = in.nextLine(); //调用保存信息的方法 saveLog("大锤",me,fileName); //调用输入的对象回复信息的方法 String getrePly = getReply(map,me); //判断getrePly是否为空,不为空将信息存入文件,为空的话输出相应的内容 if(getrePly==null) { String str = "不想理你,你给我走。。。。。。。"; System.out.println(name+":"+str); saveLog(name, str, fileName); }else { System.out.println(name +":"+getrePly); saveLog(name, getrePly, fileName); } } } }

    2.创建输入聊天对象信息回复的方法

    /** * 创建输入聊天对象信息回复的方法 * @param map * @param me * @return */ private static String getReply(Map<String, List<String>> map, String me) { //定义一个集合,用来接收聊天对象回复的信息 List<String> value = null; //创建Set集合 Set<String> set = map.keySet(); //使用加强循环进行遍历 for(String obj:set) { //判断输入的内容和集合中的信息是否包含,并将其存入到value中 if(me.contains(obj.toString())) { value = map.get(obj); break; } } //若信息不存在,返回null if(value == null) { return null; } //创建随机数的对象,获取聊天对象回复的信息 Random radom = new Random(); //从女神文件中随机选择聊天的对话 me = value.get(radom.nextInt(3)); return me; }

    3.初始化聊天字典的方法

    private static Map<String, List<String>> showLog() throws IOException { //初始化聊天的文件字典 Map<String, List<String>> map = new HashMap<String,List<String>>(); //创建文件对象 File chui = new File("src/ChatHomeWork/王大锤.txt"); File girl = new File("src/ChatHomeWork/女神.txt"); //读取对应的聊天对象的文件 List<String> chuiList = readLog(chui); List<String> girlList = readLog(girl); //定义一个list集合,用来存放聊天对象的对话 List<String> values; //创建循环大锤说的话 for(int i=0;i<chuiList.size();i++) { values = new ArrayList<String>(); //循环输入的女神聊天说的话,和大锤的是1对3 for(int j = i*3;j<i*3+3;j++) { //将聊天对象说的话添加到集合中 values.add(girlList.get(j)); } //将语录添加到字典中 map.put(chuiList.get(i),values); } return map; }

    4.保存聊天信息的方法

    private static void saveLog(String name, String getrePly, String fileName) throws IOException { //创建文件夹 File file = new File(fileName); //判断该文件是否存在,若不存在就创建文件 if(!file.exists()) { file.createNewFile(); } //格式化时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = sdf.format(new Date()); //调用字符缓冲流,加true可以在文件中追加写入信息 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName,true))); //写入文件 bw.write(date + "-" + name + ":" + getrePly); //换行 bw.newLine(); //关流 if(bw != null) bw.close(); }

    5.读取聊天信息的方法

    private static List<String> readLog(File file) throws IOException { //创建list集合,将读取的信息存入集合中 List<String> list = new ArrayList<String>(); //定义字符缓冲流 BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream(file))); String line; //为null的话结束循环 while((line =br.readLine()) !=null) { //将信息添加到集合中 list.add(line); } //关流 if(br != null) br.close(); return list; } }

    注意:为了让你们更好的明白我才分开这样写的,这些代码我都是写在主界面的Chat里面的

    6.运行展示

    Processed: 0.013, SQL: 9