Class StringsComparator
It is guaranteed that the comparisons will always be done as
o1.equals(o2) where o1 belongs to the first
sequence and o2 belongs to the second sequence. This can
be important if subclassing is used for some elements in the first
sequence and the equals method is specialized.
Comparison can be seen from two points of view: either as giving the smallest
modification allowing to transform the first sequence into the second one, or
as giving the longest sequence which is a subsequence of both initial
sequences. The equals method is used to compare objects, so any
object can be put into sequences. Modifications include deleting, inserting
or keeping one object, starting from the beginning of the first sequence.
This class implements the comparison algorithm, which is the very efficient
algorithm from Eugene W. Myers
An O(ND) Difference Algorithm and Its Variations. This algorithm produces
the shortest possible edit script containing all the
commands needed to transform the first sequence into
the second one.
This code has been adapted from Apache Commons Collections 4.0.
- Since:
- 1.0
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classThis class is a simple placeholder to hold the end part of a path under construction in aStringsComparator. -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionStringsComparator(String left, String right) Constructs a new instance of StringsComparator. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidbuildScript(int start1, int end1, int start2, int end2, EditScript<Character> script) Builds an edit script.private StringsComparator.SnakebuildSnake(int start, int diag, int end1, int end2) Builds a snake.private StringsComparator.SnakegetMiddleSnake(int start1, int end1, int start2, int end2) Gets the middle snake corresponding to two subsequences of the main sequences.Gets theEditScriptobject.
-
Field Details
-
left
First character sequence. -
right
Second character sequence. -
vDown
private final int[] vDownTemporary array. -
vUp
private final int[] vUpTemporary array.
-
-
Constructor Details
-
StringsComparator
Constructs a new instance of StringsComparator.It is guaranteed that the comparisons will always be done as
o1.equals(o2)whereo1belongs to the first sequence ando2belongs to the second sequence. This can be important if subclassing is used for some elements in the first sequence and theequalsmethod is specialized.- Parameters:
left- first character sequence to be comparedright- second character sequence to be compared
-
-
Method Details
-
buildScript
Builds an edit script.- Parameters:
start1- the begin of the first sequence to be comparedend1- the end of the first sequence to be comparedstart2- the begin of the second sequence to be comparedend2- the end of the second sequence to be comparedscript- the edited script
-
buildSnake
Builds a snake.- Parameters:
start- the value of the start of the snakediag- the value of the diagonal of the snakeend1- the value of the end of the first sequence to be comparedend2- the value of the end of the second sequence to be compared- Returns:
- The snake built
-
getMiddleSnake
Gets the middle snake corresponding to two subsequences of the main sequences.The snake is found using the MYERS Algorithm (this algorithms has also been implemented in the GNU diff program). This algorithm is explained in Eugene Myers article: An O(ND) Difference Algorithm and Its Variations.
- Parameters:
start1- the begin of the first sequence to be comparedend1- the end of the first sequence to be comparedstart2- the begin of the second sequence to be comparedend2- the end of the second sequence to be compared- Returns:
- The middle snake
-
getScript
Gets theEditScriptobject.It is guaranteed that the objects embedded in the
insert commandscome from the second sequence and that the objects embedded in either thedelete commandsorkeep commandscome from the first sequence. This can be important if subclassing is used for some elements in the first sequence and theequalsmethod is specialized.- Returns:
- The edit script resulting from the comparison of the two sequences
-