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
Woran ich vorerst gedacht habe, ist so etwas.
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? ??
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.
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.
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.
Ja. https://github.com/satodaiki/DiffTool
2018/12/2 Erstausgabe 2018/12/3 Es gab einen Fehler in der Quelle, also habe ich ihn behoben.
Recommended Posts