首页 > 编程语言 >java DiffUtils文本差异对比实现

java DiffUtils文本差异对比实现

时间:2023-10-25 13:32:53浏览次数:35  
标签:java String DiffUtils List text poi new 文本

1、首先引入mvn

<dependency>
  <groupId>io.github.java-diff-utils</groupId>
  <artifactId>java-diff-utils</artifactId>
  <version>4.11</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-scratchpad</artifactId>
  <version>4.0.0</version>
</dependency>

2、编写解析word为text函数

public List<String> parseWord(String input){
        try{
            InputStream inputStream = new FileInputStream(input);
            XWPFDocument document = new XWPFDocument(inputStream);

            List<String> pList = new ArrayList<>();
            Map<String, Poi.PraInfo> pMap = new HashMap<>();
            Integer lineNum = 1;
            List<XWPFParagraph> paras = document.getParagraphs();
            if (!CollectionUtils.isEmpty(paras)) {
                for (XWPFParagraph para : paras) {
                    //当前段落的属性
                    //CTPPr pr = para.getCTP().getPPr();
                    String text = para.getText();
                    if (StringUtils.isBlank(text)) {
//                        continue;
                    }
                    pList.add(text);
                }
            }
            return pList;
        }catch (Exception e){
            e.printStackTrace();
        }
        return new ArrayList<>();
    }

3、编写差异函数

public void diff1(){
        try {
            String sourceFile = "D:/java_work_space/test/doc_comparer/2.docx";
            String targetFile = "D:/java_work_space/test/doc_comparer/2-1.docx";
            //原始文件
            List<String> original = parseWord(sourceFile);
            //对比文件
            List<String> revised = parseWord(targetFile);

            //两文件的不同点
            Patch<String> patch = DiffUtils.diff(original, revised);

            //生成统一的差异格式
            List<String> unifiedDiff = UnifiedDiffUtils.generateUnifiedDiff("test1.txt", "test2.txt", original, patch, 0);
            for(int i=2;i<unifiedDiff.size();i++){
                System.out.println(unifiedDiff.get(i));
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }

标签:java,String,DiffUtils,List,text,poi,new,文本
From: https://blog.51cto.com/u_15595167/8017115

相关文章

  • 基于Java的垃圾分类管理系统
    (文章目录)具体实现截图主要功能:基于java(ssm)垃圾分类管理系统系统分为小区和管理员两个角色小区的主要功能有:1.小区管理者登陆系统2.垃圾分类信息查看3.垃圾站信息查看4.垃圾运输信息查看5.小区管理者在线报修申请,删除,修改,查询报修信息6.小区管理员在线投诉,删除,修改,查......
  • java MAP集合
    javaMAP集合map集合的特点有哪些?map集合是无序的,键值对,建不能重复,值可以重复,集合中的键可以为空如何给map集合赋值?可以调用map.put()方法,进行赋值(注意!键不可以重复)如何获取到map集合的值?可以调用map.get()方法,可以通过键获取值运行结果如何遍历map集合?便利map集合的......
  • Java拾贝第十一天——IO之File类
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么Java中提供了IO以操控计算机中的文件File类在整个IO包中,与文件相关的类就是File类。使用它可以进行创建或删除文件因为File类是个普通类,初始化它需要调用其有参构造publicFile(Stringpathname){//传参为文件路径}使......
  • 华为云耀云服务器L实例:初级篇-java环境配置
     华为云耀云服务器L实例是一款可快速部署且易于运维的轻量级云服务器,专为中小企业和入门级开发者打造。它不仅拥有华为云擎天架构的强大性能,还具有多项用户体验优化方案,让用户轻松上手,享受简单上云的乐趣。本产品网址为:https://www.huaweicloud.com/product/hecs-light.html......
  • ChatGPT 问答00024 10亿小片段文本推荐用什么数据库记录
    对于这种大规模的文本数据,一种可能的解决方案是使用分布式数据库系统,它能够有效地处理和查询大量数据。以下是一些可能的选择:ApacheCassandra:Cassandra是一个高度可扩展的分布式数据库,特别适合处理大量数据跨多个数据中心和云服务。它提供了高性能和无单点故障等特点。Goog......
  • java spring,springmvc,spring boot,spring data,RESTful api设计风格,HTTP协议的四种传
    一.基本技术1.Springmvc=手动接电线(配置xml),提供了一种友好的方式来开发Web应用程序。通过使用诸如DispatcherServlet,ModelAndView和ViewResolver,可以轻松开发Web应用程序。2.SpringBoot=标准插座(第3方开源类库想接入,就按照标准做一个starter的适配),实现了免xml配置和提供......
  • Java类加载机制详解 | 京东云技术团队
    一.类加载器及双亲委派机制类加载器加载类备注启动类加载器(BootstrapClassLoader)JAVA_HOME/jre/lib无上级,无法直接访问由jvm加载拓展类加载器(ExtensionClassLoader)JAVA_HOME/jre/lib/ext父加载器为Bootstrap,显示为null。该类由Bootstrap加载应用类加载器(ApplicationClassLoa......
  • Java 流程控制 01~12
    Java流程控制01~121.Scanner对象实现获取用户输入​ 1.1.scanner基本用法Scannerscanner=newScanner(System.in);//接受用户inputif(scanner.hasNextLine()){//判断用户是否输入Stringstr=scanner.nextLine();//获取用户输入System.out.println("......
  • Java图片压缩遇到 "No suitable ImageReader found for source data."
     问题:使用压缩工具的时候突然遇到图片压缩失败的情况。此时检查一下要上传的图片是否正常。处理方式:检查图片数据是否异常,一个图片五六兆。图片虽然是JPG结尾的,但是不在“ ImageIO”类的支持范围内。例如 WebP图片虽然可以以JPG格式结尾,但是 “ ImageIO”类......
  • 「Java开发指南」如何在MyEclipse中使用JPA和Spring管理事务?(二)
    本教程中介绍一些基于JPA/spring的特性,重点介绍JPA-Spring集成以及如何利用这些功能。您将学习如何:为JPA和Spring设置一个项目逆向工程数据库表来生成实体实现创建、检索、编辑和删除功能启用容器管理的事务在上文中,我们为大家介绍了如何用JPA和SpringFacets创建一个Java......