java实现替换文本中的乱码字符
个人便捷工具
功能
在指定的文本文件中,批量替换某一个或段字符串,并更新文件内容。
实现
-
创建文件加载与操作转换类
Trasfer.javaimport 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.javaimport 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的值为临时文件路径 -
如果想对内容进行其他操作,可以再添加方法

浙公网安备 33010602011771号