java - 我想以其他颜色突出显示比较两个字符串时发现的增量(差异)的文本
问题描述
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();
}
解决方案
据我了解,您追求的是性格差异,但 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.");
}
推荐阅读
- r - 嵌入在 R 包中的闪亮应用和数据
- php - Laravel Eloquent 模型复杂查询
- amazon-web-services - AWS - 托管 Web 应用程序的客户端(HTML、CSS、JS、图像文件)的推荐方式是什么?
- cluster-analysis - 在给定地图中对消防队、警察、救护车进行聚类时使用的最佳聚类算法是什么?
- java - 为什么 ENUM 不能在 H2 的子查询中工作?
- python - Python3 命令行和 argparse 问题
- c++ - C++,检查用户是否在一个字符中输入了多个字母
- c# - c#通过单击按钮停止线程
- ruby-on-rails - 仅从 React Native App 访问 AWS s3 文件
- regex - 正则表达式匹配同一行中的多个匹配项,可选文本之间