gu123xin 2018-08-15 09:42 采纳率: 100%
浏览 1628
已采纳

java将一个文本的数据插入另一个文本的指定位置

现在有个问题,我有一个文本,上面的数据不全,需要将另外一个文本的数据插入,以id号的顺序插入
图片说明
上面的是不全的文本,下面的是需要插入的文本图片说明
最后是这样的图片说明,如果第一个文本,即不全的文本数据量比较大,还需要用上面方式来处理?

  • 写回答

8条回答 默认 最新

  • 张音乐 博客专家认证 2018-08-15 10:31
    关注
     package design;
    
    import org.yaml.snakeyaml.reader.UnicodeReader;
    
    import java.io.*;
    import java.util.*;
    
    public class ReadTxt {
    
        public static List<Map<String,String>> readFromLockingTxt(String fileName) {
            BufferedReader reader = null;
            List<Map<String,String>> mapList = new ArrayList<Map<String,String>>();
            try{
                FileInputStream fileInputStream = new FileInputStream(new File(fileName));
                UnicodeReader unicodeReader = new UnicodeReader(fileInputStream);
                reader = new BufferedReader(unicodeReader);
                String tempString = null;
                int line = 1;
                while ((tempString = reader.readLine()) != null) {
                    Map<String,String> map = new LinkedHashMap<String,String>();
                    System.out.println("line " + line + ": " + tempString);
                    tempString.trim();
                    if(line==1){
                        String [] strs = tempString.split("\\|");
                        map.put("id",strs[0].trim());
                        map.put("name",strs[1].trim());
                        map.put("pass",strs[2].trim());
                    }else{
                        //替换多个空格
                        String string = tempString.replaceAll(" {1,}", "");
                        String [] strs = string.split(",");
                        map.put("id",strs[0].trim());
                        map.put("name",strs[1].trim());
                        if(strs.length == 3){
                            map.put("pass",strs[2].trim());
                        }else{
                            map.put("pass","");
                        }
                    }
                    mapList.add(map);
                    line++;
                }
                reader.close();
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                if (reader != null){
                    try{
                        reader.close();
                    }catch (IOException e1){
                        e1.printStackTrace();
                    }
                }
            }
            return mapList;
        }
    
        public static Map<String,String> readFromKeyTxt(String fileName) {
            BufferedReader reader = null;
            Map<String,String> map = new LinkedHashMap<String,String>();
            try{
                FileInputStream fileInputStream = new FileInputStream(new File(fileName));
                UnicodeReader unicodeReader = new UnicodeReader(fileInputStream);
                reader = new BufferedReader(unicodeReader);
                String tempString = null;
                int line = 1;
                while ((tempString = reader.readLine()) != null) {
                    System.out.println("line " + line + ": " + tempString);
                    tempString.trim();
                    //替换多个空格
                    String string = tempString.replaceAll(" {1,}", "");
                    String [] strs = string.split(",");
                    map.put(strs[0].trim(),strs[1].trim());
                    line++;
                }
                reader.close();
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                if (reader != null){
                    try{
                        reader.close();
                    }catch (IOException e1){
                        e1.printStackTrace();
                    }
                }
            }
            return map;
        }
    
    
        public static void writeListToTxt(List<Map<String,String>> list,String fileName){
            StringBuilder sb = new StringBuilder();
            for(int i=0;i<list.size();i++){
                if(i==0){
                    sb.append(list.get(i).get("id")+"a\u007C"+list.get(i).get("name")+"a\u007C"+list.get(i).get("pass")).append("\r\n");
                }else{
                    sb.append(list.get(i).get("id")+","+list.get(i).get("name")+","+list.get(i).get("pass")).append("\r\n");
                }
            }
            try{
                FileWriter writer = new FileWriter(fileName);
                BufferedWriter bw = new BufferedWriter(writer);
                bw.write(sb.toString());
                bw.close();
                writer.close();
            }catch(Exception e){
                e.printStackTrace();
            }
    
        }
    
        public static boolean isEmpty(String s) {
            return ((s == null) || (s.length() == 0));
        }
    
    }
    
    
     package design;
    
    import java.io.File;
    import java.util.List;
    import java.util.Map;
    
    public class App {
        public static void main(String args[]){
    
            //读取缺失的文件
            List<Map<String,String>> lockMapList = ReadTxt.readFromLockingTxt("D:"+ File.separator+"workspace"+File.separator+"lacking.txt");
            System.out.println("修改前list为:"+lockMapList);
    
            //读取补充文件
            Map<String,String> keyMap = ReadTxt.readFromKeyTxt("D:"+ File.separator+"workspace"+File.separator+"key.txt");
            System.out.println("需要插入的文本为:"+keyMap);
    
            //组合成新的完整的list
    
            lockMapList.parallelStream().forEach(p->{
                if(ReadTxt.isEmpty(p.get("pass"))){
                    p.replace("pass",keyMap.get(p.get("id")));
                }
            });
            System.out.println("组合后list为:"+lockMapList);
    
            //重组完成后的List存储到txt文件
            ReadTxt.writeListToTxt(lockMapList,"D:"+ File.separator+"workspace"+File.separator+"whole.txt");
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题