java实现替换文本中的乱码字符

个人便捷工具

功能

在指定的文本文件中,批量替换某一个或段字符串,并更新文件内容。

实现

  • 创建文件加载与操作转换类Trasfer.java

    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.HashMap;
    import java.util.Map;
    public class Trasfer {
    
        /**
         * 记录替换的记录
         */
        private static Map<String, Integer> recordMap = new HashMap<String, Integer>();
        /**
         * 文件内容
         */
        private static StringBuffer content = null;
    
        public static StringBuffer getContent() {
            return content;
        }
    
        public static Map<String, Integer> getRecordMap() {
            return recordMap;
        }
    
        /**
         * JDK11 读取与加载文件
         *
         * @param fileName 读取源文件名
         * @return
         */
        public static StringBuffer loadByFile(String fileName) {
            StringBuffer sbf = new StringBuffer();
            try {
                // 读取字节流
                byte[] bytes = Files.readAllBytes(Paths.get(fileName));
                sbf = new StringBuffer(new String(bytes, "utf-8"));
                return content = sbf;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return content = sbf;
        }
    
        /**
         * 替换指定字符串
         *
         * @param org    被替换的字符串
         * @param result 替换成的字符串
         * @return
         */
        public static StringBuffer replaceStr(String org, String result) {
            if (content == null) {
                return content;
            }
            int index = content.indexOf(org);
            while (index >= 0) {
                content.replace(index, index + 1, result);
    
                index = content.indexOf(org);
    
                Integer count = recordMap.get(org);
                // 替换次数
                recordMap.put(org, count == null ? 1 : ++count);
            }
            return content;
        }
    
    
        /**
         * 以默认UTF-8编码,存储内容到指定文件
         *
         * @param destFileName 目标文件名
         */
        public static void saveToFile(String destFileName) {
            if (recordMap.isEmpty()) {
                return;
            }
            recordMap.clear();
            try {
    
                // Java 11 , default StandardCharsets.UTF_8
                Files.writeString(Paths.get(destFileName), content);
    
                // encoding
                // Files.writeString(Paths.get(path), content, StandardCharsets.US_ASCII);
    
                // extra options
                // Files.writeString(Paths.get(path), content,
                //		StandardOpenOption.CREATE, StandardOpenOption.APPEND);
                System.out.println("save success");
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    
  • 创建工具入口,这里使用测试类TrasferTest.java

    import org.junit.Test;
    public class TrasferTest {
    
        @Test
        public void readFileContent() throws Exception {
            // 源文件路径
            String sourcePath = "D:\\1lagoustudy\\workspace\\doc\\spring\\Spring.md";
    //        sourcePath = "D:\\1lagoustudy\\workspace\\doc\\mybatis\\mysql 手写.md";
            // 目标文件路径
            String destFileName = "D:\\1lagoustudy\\workspace\\doc\\spring\\test2.md";
            destFileName = sourcePath;
            Trasfer.loadByFile(sourcePath);
    
            System.out.println(Trasfer.getContent());
    
            // 核心替换
            replace();
    
            System.out.println("替换目标文字个数: " + Trasfer.getRecordMap());
    
            Trasfer.saveToFile(destFileName);
        }
    
        /**
         * 替换内容
         */
        private void replace() {
            Trasfer.replaceStr("⽀", "支");
            Trasfer.replaceStr("⽬", "目");
            Trasfer.replaceStr("⽅", "方");
            Trasfer.replaceStr("⽣", "生");
            Trasfer.replaceStr("⾼", "高");
            Trasfer.replaceStr("⾏", "行");
            Trasfer.replaceStr("⻆", "角");
            Trasfer.replaceStr("⾮", "非");
            Trasfer.replaceStr("⼦", "子");
            Trasfer.replaceStr("⼯", "工");
            Trasfer.replaceStr("⼊", "入");
            Trasfer.replaceStr("⾯", "面");
            Trasfer.replaceStr("⽤", "用");
            Trasfer.replaceStr("⼆", "二");
            Trasfer.replaceStr("⼀", "一");
            Trasfer.replaceStr("⽂", "文");
            Trasfer.replaceStr("⼼", "心");
            Trasfer.replaceStr("⼚", "厂");
            Trasfer.replaceStr("⾥", "里");
            Trasfer.replaceStr("⽆", "无");
            Trasfer.replaceStr("⽽", "而");
            Trasfer.replaceStr("⽐", "比");
            Trasfer.replaceStr("⻅", "见");
            Trasfer.replaceStr("⽇", "日");
            Trasfer.replaceStr("⼝", "口");
          // 更新
          Trasfer.replaceStr("⼿", "手");
          Trasfer.replaceStr("⾃", "自");
          Trasfer.replaceStr("⼏", "几");
          Trasfer.replaceStr("⼰", "己");
          Trasfer.replaceStr("⻄", "西");
          Trasfer.replaceStr("⻚", "页");
          Trasfer.replaceStr("⼗", "十");
          Trasfer.replaceStr("⾄", "至");
          Trasfer.replaceStr("⼋", "八");
          Trasfer.replaceStr("⻛", "风");
          Trasfer.replaceStr("⽚", "片");
          Trasfer.replaceStr("⼴", "广");
          Trasfer.replaceStr("⽹", "网");
          Trasfer.replaceStr("⾸", "首");
        }
    }
    

    若不想更新原文件,想生成新文件,可以改变量destFileName的值为临时文件路径

  • 如果想对内容进行其他操作,可以再添加方法

posted @ 2020-12-13 12:24  木桃与琼瑶  阅读(477)  评论(1)    收藏  举报