Wpis z mikrobloga

#programowanie #java #diff

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).
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

  • 3
@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
  • Odpowiedz
@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
  • Odpowiedz
  • 0
@mk321: aaa, bo to porównywanie na grubsza skalę.. to faktycznie skoro jest gotowa biblioteka to trzeba się w nią wgryźć. Nie ma dokumentacji? o.O
  • Odpowiedz
@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).
  • Odpowiedz