Ich habe ein Diff-Tool für Java-Dateien erstellt

Überblick

Es ist eine Fortsetzung von dem, den ich früher (oder gestern) geschrieben habe.

Klicken Sie hier für den entsprechenden Artikel!

Ich habe ein Java-Quellanalyse-Tool in Java geschrieben ... https://qiita.com/banana5388/items/cd8a549d1885aa6dd039

Im Kommentar des vorherigen Artikels haben Sie darauf hingewiesen, dass "Beginnen wir mit etwas Einfachem", und ich habe zunächst einfach die Anzahl der Schritte ermittelt, die sich zwischen den beiden Quellcodes unterscheiden.

(Sagen Sie nicht die Neuentwicklung der Räder !!!!!! Es hätte Spaß gemacht, etwas zu machen !!!) </ font>

Die Eingabe und Ausgabe dessen, was ich dieses Mal erstellen werde, ist also so.

INPUT :Absoluter Pfad der Vergleichsquelle und des Vergleichsziels
OUTPUT:Anzahl der Schritte mit unterschiedlichem Code

Spezifikation

Woran ich vorerst gedacht habe, ist so etwas.

  1. Analysieren Sie den erhaltenen Code für jede Vergleichsquelle und jedes Vergleichsziel zeichenweise
  2. Wenn zwischen der Vergleichsquelle und dem Vergleichsziel unterschiedliche Zeichen angezeigt werden, stoppen Sie die Vergleichsquelle an der aktuellen Zeichenposition und verschieben Sie das Vergleichszielzeichen zur nächsten Zeichenanalyse.
  3. Wenn am Vergleichsziel dasselbe Zeichen wie die Vergleichsquelle angezeigt wird, starten Sie die Zeichenanalyse der Vergleichsquelle neu.
  4. Wenn am Vergleichsziel ein Zeilenvorschubzeichen angezeigt wird, während die Analyse der Vergleichsquellenzeichen gestoppt ist, fügen Sie 1 Differenzschrittnummer hinzu.
  5. Setzen Sie den Vorgang von [2. - 4] fort, bis die Zeichen der Vergleichsquelle oder des Vergleichsziels abgeschlossen sind.
  6. Geben Sie aus, wie viele Zeilen sich aufgrund der Analyse unterscheiden

Vorerst habe ich dies so umgesetzt, wie es ist.

Die Implementierung des Hauptteils sieht so aus.

JavaCodeDifference.java



   /**
     *Vergleicht zwei Codes und gibt die Anzahl der übereinstimmenden Zeilen zurück
     *
     * @param origCode Vergleichsquellcode (in einer Liste für jede Zeile gespeichert)
     * @param destCode Vergleichender Code (in einer Liste für jede Zeile gespeichert)
     * @return Anzahl der übereinstimmenden Zeilen zum Vergleich
     */
    public static int countCodeDiff(List<String> origCode, List<String> destCode) {

        int cnt = 0;

        //Generieren eines Iterators für Zeichenfolgen

        //Die Methode "getNotIncludeIgnoreCode" basiert auf den in der Liste gespeicherten zeilenweisen Codeinformationen.
        //Löschen Sie Leerzeichen mit halber Breite, Leerzeichen mit voller Breite, Tabulatorzeichen und Zeilenvorschubzeichen und fügen Sie am Ende ein Zeilenvorschubzeichen hinzu.
        //Es ist eine Methode, die schließlich als eine Zeichenfolge (Zeichenfolgentyp) zurückgegeben wird.
        StringCharacterIterator origCodeIterator =  new StringCharacterIterator(getNotIncludeIgnoreCode(origCode));
        StringCharacterIterator destCodeIterator =  new StringCharacterIterator(getNotIncludeIgnoreCode(destCode));

        //Ausführen, bis entweder das Vergleichsquellen- oder das Vergleichszielzeichen endet
        while (origCodeIterator.current() != StringCharacterIterator.DONE &&
                destCodeIterator.current() != StringCharacterIterator.DONE) {

            //Erhöhen Sie die Anzahl, wenn verschiedene Codezeichen in der Vergleichsquelle und dem Vergleichsziel enthalten sind und das Vergleichsziel zuerst einen Zeilenumbruch aufweist.
            if (origCodeIterator.current() == destCodeIterator.current()) {
                destCodeIterator.next();
                origCodeIterator.next();
            } else {
                if (destCodeIterator.current() == '\n') {
                    cnt++;
                }
                destCodeIterator.next();
            }
        }

        return cnt;
    }

Ist es nicht ein gutes Gefühl? ??

Prüfung

Erster Test

Ich habe den Text zum Testen vorbereitet.

test1.java


aaaa
iiii
uuuu

test2.java


aaaa
iiii
uuuu

Es ist überhaupt keine Java-Datei, aber vorerst dient es zum Testen. Ist das in Ordnung? Nun, die Ausgabe ist. .. ..

> Number of different lines: 0

Ja, es sieht gut aus.

Zweiter Test

Ein weiterer Test

test1.java


aaaa
iiii
uuuu

test2.java


aaa
iii
uuu

Nun, die Ausgabe ist. .. ..

> Difference Code Line Count:3

Das sieht auch gut aus.

Impressionen

Vorerst bin ich zufrieden, weil es sich nach den Vorgaben bewegt.

Vielmehr sind die Spezifikationen ziemlich locker ... Ich würde es gerne neu implementieren, damit es verwendet werden kann.

Die Quelle ist öffentlich zugänglich

Ja. https://github.com/satodaiki/DiffTool

Änderungsprotokoll

2018/12/2 Erstausgabe 2018/12/3 Es gab einen Fehler in der Quelle, also habe ich ihn behoben.

Recommended Posts

Ich habe ein Diff-Tool für Java-Dateien erstellt
Ich habe ein neues Java-Bereitstellungstool erstellt
Ich habe ein Check-Tool für das Release-Modul erstellt
Ich habe eine shopify App @java erstellt
Ich habe ein Tool zur Generierung von package.xml erstellt.
Ich habe ein Plug-In für IntelliJ IDEA erstellt
Erstellt eine Methode zum Anfordern von Premium Friday (Java 8-Version)
Ich habe ein Programm zur Beurteilung von Primzahlen in Java erstellt
[Java] Was soll ich zum Schreiben von Dateien verwenden?
Ich habe ein Janken-Spiel in Java (CLI) gemacht.
Ich habe ein Docker-Image für die japanische Version von SDAPS erstellt
Ich habe ein einfaches Berechnungsproblemspiel in Java gemacht
Ich habe eine Methode entwickelt, um nach Premium Friday zu fragen
Probieren Sie Easy Ramdom, ein PropertyBase-Testtool für Java
Ich habe eine Bibliothek zum Anzeigen von Tutorials auf Android erstellt.
Ich habe einen Wrapper erstellt, der KNP von Java aus aufruft
Ich habe ein Roulette in Java gemacht.
Ich habe eine Chat-App erstellt.
[Paiza] Ich habe mein eigenes Dienstprogramm zum Beantworten von Fragen erstellt. [Java]
[Anfänger] Ich habe ein Programm zum Verkauf von Kuchen in Java erstellt
Ich habe Randoop untersucht, einen JUnit-Testklassengenerator für Java.
Ich habe eine Docker-Datei erstellt, um Glassfish 5 mit Oracle Java zu starten
Ich habe ein PDF mit Java erstellt.
Ich habe mit Swing eine GUI erstellt
Ich habe eine einfache Empfehlungsfunktion erstellt.
Ich habe eine Anmerkung in Java gemacht.
Ich habe eine passende App erstellt (Android App)
[Android] Ich habe eine Schrittzähler-App erstellt.
Ich möchte rekursiv nach Dateien in einem bestimmten Verzeichnis suchen
Ich habe eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 1) erstellt.
Ich habe eine Quelle erstellt, die automatisch eine JPA-Entitätsklassendatei generiert
Ich habe eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 5) erstellt:
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
Eine Geschichte, die ich als Nicht-Ingenieur endlich verstanden habe
[Ruby] Ich habe einen einfachen Ping-Client erstellt
Holen Sie sich eine Liste der S3-Dateien mit ListObjectsV2Request (AWS SDK für Java)
[Java-Tool] Ein Tool, das Dateien unter dem angegebenen Pfad nach Erweiterung löscht
Java für alle! Ich habe jedermanns Java #minjava gelesen
Ich habe Cassandras Object Mapper für Java ausprobiert
Ich hatte Probleme bei der Arbeit und habe ein IntelliJ-Plug-In erstellt
Ich habe eine Methode für den Premium-Freitag mit einem Liner erstellt
Ich habe mit Ruby einen riskanten Würfel gemacht
Ich habe eine Janken App mit Kotlin gemacht
Ich habe eine Taschenrechner-App für Android erstellt
Ich habe eine Janken App mit Android gemacht
Ich habe eine Klasse erstellt, die JUMAN und KNP aus Java verwenden kann
[LINE BOT] Ich habe einen Ramen BOT mit Java (Maven) + Heroku + Spring Boot (1) gemacht.
Ich habe eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 2) erstellt: Modell ändern
Ich habe einen THETA API-Client erstellt, der für die Plug-Entwicklung verwendet werden kann
Lerne Java mit Progate → Ich werde es erklären, weil ich selbst ein einfaches Spiel gemacht habe
Ich habe eine einfache Grafikbibliothek für Smartphone-Apps erstellt [MP Android Chart Kai]
[Azure] Ich habe versucht, eine Java-App für die Erstellung von kostenlosen Web-Apps zu erstellen. [Anfänger]
Eine Geschichte über die Java 11-Unterstützung für Webdienste
04. Ich habe mit SpringBoot + Thymeleaf ein Frontend gemacht
Ich habe Mosaikkunst mit Pokemon-Bildern gemacht
Java Ich habe versucht, einen einfachen Block zu brechen
[Java] Verarbeitet alle Dateien in einem bestimmten Verzeichnis
Studiere 3 Wochen und bestehe Java Bronze