Jak zrobić diffa dwóch stringów? String a = "aaa 123 bbb 4567 ccc"; String b = "aaa 144 bbb 4888 ccc"; Chciałbym, żeby znalazło mi: Dla a: "23", "567" Dla b: "44", "888".
Patrzyłem już org.apache.commons.lang3.StringUtils. Zwraca mi "44 bbb 4888 ccc" (czyli całość od pierwszego wystąpienia innego znaku, bez sensu). Patrzyłem też com.googlecode.java-diff-utils. Ale on pokazuje tylko w której linii jest zmiana (w tym wypadku jedna cała linia).
Docelowo ma mi to porównywać dwa pliki HTML. To poszukałem też pod tą frazą i jest niby daisydiff, ale nie ma żadnej dokumentacji, nie umiem go nawet (ale i tak z tego co patrzę, to on generuje jakiś graficzny raport - mi potrzebny sam tekst zmian).
@SenJestDlaSlabych: "pattern matcher"? Rozwiniesz? Jeśli chodzi o wyrażenia regularne to nie wiem jakby to miało działać. Jakie miałbym dać wyrażenie regularne?
@mk321: string to zasadniczo tablica charow, porownaj znaki na tych samych pozycjach (z tym samym indeksem) i odpowiednio dzialaj w zaleznosci czy pasuja czy nie
@Veuch: to się nie sprawdzi. Już na stacku ktoś wymyślił, że po co biblioteka (java-diff-utils) do sprawdzania zmian w całych liniach jak można przecież sprawdzić linia po linii czy się różnią. No i nie można. Jak w jednym z plików na początku wstawisz linię, to okazało by się, że oba pliki całkowicie się różnią. No a biblioteka sprawdzi dokładnie. To na pewno jest jakiś bardziej skomplikowany algorytm i z palca
@SenJestDlaSlabych: Stringtokenizer?! Przecież to jest całkiem do czego innego (działa jak split, dzieli ciąg na podciągi według ograniczników).
@Veuch: no nie proste porównanie ciągów, tylko diff (tak jak np. masz historię zmian w SVN, GIT, na Wikipedii itd). Tu jest ta biblioteka: https://code.google.com/p/daisydiff/ Nie ma dokumentacji, jest stara, niewspierana i w ogóle nie robi tego co potrzebuję (przynajmniej tak wygląda).
@mk321: bardzo dobrym algorytmem do diff jest skorzystanie z Damerau–Levenshtein edit distance linia po linii, ale masz racje skorzystaj z czegoś gotowego
Jak zrobić diffa dwóch stringów?
String a = "aaa 123 bbb 4567 ccc";
String b = "aaa 144 bbb 4888 ccc";
Chciałbym, żeby znalazło mi:
Dla a: "23", "567"
Dla b: "44", "888".
Patrzyłem już org.apache.commons.lang3.StringUtils. Zwraca mi "44 bbb 4888 ccc" (czyli całość od pierwszego wystąpienia innego znaku, bez sensu).
Patrzyłem też com.googlecode.java-diff-utils. Ale on pokazuje tylko w której linii jest zmiana (w tym wypadku jedna cała linia).
Docelowo ma mi to porównywać dwa pliki HTML. To poszukałem też pod tą frazą i jest niby daisydiff, ale nie ma żadnej dokumentacji, nie umiem go nawet (ale i tak z tego co patrzę, to on generuje jakiś graficzny raport - mi potrzebny sam tekst zmian).
Jeśli chodzi o wyrażenia regularne to nie wiem jakby to miało działać. Jakie miałbym dać wyrażenie regularne?
@Veuch: no nie proste porównanie ciągów, tylko diff (tak jak np. masz historię zmian w SVN, GIT, na Wikipedii itd).
Tu jest ta biblioteka: https://code.google.com/p/daisydiff/
Nie ma dokumentacji, jest stara, niewspierana i w ogóle nie robi tego co potrzebuję (przynajmniej tak wygląda).
Komentarz usunięty przez autora