比较两个字符串中不同的部分,并高亮显示,中文具体到字,外文具体到单词,并植入标签

1、引入1个比较的jar包

<dependency>
    <groupId>io.github.java-diff-utils</groupId>
    <artifactId>java-diff-utils</artifactId>
    <version>4.9</version>
</dependency>

2、编码

public static String[] getHighString(
            String oldText,String newText,String insertLeftTag,
            String insertRightTag,String delLeftTag,String delRightTag,Long languageId
    ){

        //默认拆词
        Boolean inlineDiffByWord=true;
        //25:日语,55,中文简体,56:中文繁体
        List<Long> languageArray=new ArrayList<>();
        languageArray.add(25l);
        languageArray.add(55l);
        languageArray.add(56l);
        if(languageArray.contains(languageId)){
            inlineDiffByWord=false;
        }

        try {
            DiffRowGenerator generator = DiffRowGenerator.create()
                    .showInlineDiffs(true)
                    .mergeOriginalRevised(false)
                    .inlineDiffByWord(inlineDiffByWord)
                    .oldTag(f -> f+insertLeftTag)
                    .newTag(f -> f+delLeftTag)
                    .build();

            List<DiffRow> rows = generator.generateDiffRows(
                    Arrays.asList(oldText),
                    Arrays.asList(newText));
            if(rows.size()==0){
                return new String[]{oldText,newText};
            }

            String oldLine = rows.get(0).getOldLine();
            if(StringUtils.isNotEmpty(oldLine)){
                oldText=oldLine.replaceAll("true"+insertLeftTag,insertLeftTag).replaceAll("false"+insertLeftTag,insertRightTag);
            }
            String newLine = rows.get(0).getNewLine();
            if(StringUtils.isNotEmpty(newLine)){
                newText=newLine.replaceAll("true"+delLeftTag,delLeftTag).replaceAll("false"+delLeftTag,delRightTag);
            }
        }catch (Exception e){
            e.printStackTrace();
            return new String[]{oldText,newText};
        }

        return new String[]{oldText,newText};
    }

3、源码连接:https://github.com/java-diff-utils/java-diff-utils

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值