首页 > 解决方案 > 我想以其他颜色突出显示比较两个字符串时发现的增量(差异)的文本

问题描述

extentreport 1. 我正在编写一个程序来使用 DiffUtils.diff(actualHTML, expHTML) 比较两个字符串。2. 如果两个字符串有差异,它将打印 delta 3。我在范围报告中报告该 delta 4. 我想在放入范围报告时以其他颜色特别突出显示两个字符串中的更改部分。例如。字符串 1:这是原始文本,字符串 2:这是修改后的文本原始文本,修改后的范围报告中应该是其他颜色。5. 这个可以吗?

public static void main(String[] args) throws DiffException {

    String filePath=System.getProperty("user.dir") + "/test- 
    output/STMExtentReport" + new Date().getTime() + ".html";
    ExtentReports extent = new ExtentReports();
    ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter(filePath);
    extent.attachReporter(htmlReporter);
    ExtentTest test = extent.createTest("TestName");
    String originalText = "This is original text";
    String revisedText = "This is revised text"; 

    Patch<String> patch = DiffUtils.diff(originalText, revisedText);
    if (patch.getDeltas().size() != 0) {
      for (Delta<String> diffInActAndExpContent : patch.getDeltas())
     {
       System.out.println("delta:" + diffInActAndExpContent);
       test.fail(diffInActAndExpContent.toString()); 
     }
     } else {
       System.out.println("No content mismatch found by 
       ComputeDiffTwoFiles.");
    }
    extent.flush();
}

标签: javahtmlextentreportsselenium-extent-report

解决方案


据我了解,您追求的是性格差异,但 DiffUtils 提供了线条差异。您可能需要编写一些逻辑来找出这两个字符串之间的实际字符差异。一种方法是使用 apache lang 包中的 StringUtils,但它只是给出了与 2 个字符串之间的第一个不匹配字符的区别。如果它解决了您的问题,您可以使用下面的代码,或者编写逻辑来找出实际的字符差异并使用它而不是 StringUtils。范围报告只不过是一个 html 文件,可以按照您喜欢的任何方式进行格式化,请参见下面以红色突出显示的示例 -

    Patch<String> patch = DiffUtils.diff(originalText, revisedText);
    if (patch.getDeltas().size() != 0) {
        for (Delta<String> diffInActAndExpContent : patch.getDeltas()) {
            System.out.println("delta:" + diffInActAndExpContent);
            String diff = StringUtils.difference(diffInActAndExpContent.getOriginal().toString(), diffInActAndExpContent.getRevised().toString());

            test.fail(diffInActAndExpContent.toString().replace(diff, "<font color=red>" + diff + "</font>"));
        }
    } else {
        System.out.println("No content mismatch found by ComputeDiffTwoFiles.");
    }

推荐阅读