-
-
Notifications
You must be signed in to change notification settings - Fork 216
Open
Description
Describe the bug
During usage, I found that when displaying comparison results in a left‑right structure, DiffRow merges non‑optimally matched OldLine and NewLine into the same row.
To Reproduce
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import com.github.difflib.text.DiffRow;
import com.github.difflib.text.DiffRowGenerator;
/**
* Line text compare test
*
* @author zhaohuihua
* @version 20260316
*/
public class LineCompareTest {
public static void main(String[] args) throws IOException {
List<String> aTexts = Arrays.asList(
"Chapter 1 Definitions",
"Chapter 2 Risk Warnings and Explanations",
"Chapter 3 Issuance Terms",
"Chapter 4 Use of Raised Funds",
"Chapter 5 Basic Information of Issuer",
"Chapter 6 Financial Status of Issuer",
"Chapter 7 Credit Status of Issuer",
"Chapter 8 Credit Enhancement of Debt Financing Instruments",
"Chapter 9 Tax Items",
"Chapter 10 Active Debt Management"
);
List<String> bTexts = Arrays.asList(
"Chapter 1 Definitions",
"Chapter 2 Risk Warnings and Explanations",
"Chapter 3 Issuance Terms",
"Chapter 4 Basic Information of the Company",
"Chapter 5 Financial Status of the Company",
"Chapter 6 Credit Status of the Company",
"Chapter 7 Credit Enhancement of Debt Financing Instruments",
"Chapter 8 Holder Meeting Mechanism",
"Chapter 9 Use of Raised Funds",
"Chapter 10 Tax Items"
);
System.out.println("[aTexts] compare to [bTexts]:");
textLineCompare(aTexts, bTexts);
// System.out.println();
// System.out.println();
// System.out.println("[bTexts] compare to [aTexts]:");
// textLineCompare(bTexts, aTexts);
}
private static void textLineCompare(List<String> oldTexts, List<String> newTexts) {
DiffRowGenerator generator = DiffRowGenerator.create()
.showInlineDiffs(true)
.inlineDiffByWord(true)
// .mergeOriginalRevised(true)
// .reportLinesUnchanged(true)
.oldTag((tag, f) -> f ? "<old>" : "</old>")
.newTag((tag, f) -> f ? "<new>" : "</new>")
.build();
List<DiffRow> rows = generator.generateDiffRows(oldTexts, newTexts);
System.out.println("------------------------------------------------------------");
int li = 0, ri = 0;
for (DiffRow row : rows) {
String left = row.getOldLine();
String right = row.getNewLine();
if (row.getTag() == DiffRow.Tag.EQUAL) {
li++;
ri++;
System.out.printf("%-6s %4s %4s %s\n", row.getTag(), li, ri, left);
} else if (row.getTag() == DiffRow.Tag.INSERT) {
ri++;
System.out.printf("%-6s %4s %s\n", row.getTag(), ri, right);
} else if (row.getTag() == DiffRow.Tag.DELETE) {
li++;
System.out.printf("%-6s %4s %s\n", row.getTag(), li, left);
} else {
li++;
ri++;
System.out.printf("%-6s %4s %s\n", row.getTag(), li, left);
System.out.printf("%16s %s\n", ri, right);
}
System.out.println("------------------------------------------------------------");
}
}
}Expected behavior
[aTexts] compare to [bTexts]:

[bTexts] compare to [aTexts]:

System
- Java version 8
- Version 4.16
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels