J'ai créé un outil Diff pour les fichiers Java

Aperçu

C'est une continuation de celle que j'ai écrite plus tôt (ou hier).

Cliquez ici pour l'article correspondant!

J'ai écrit un outil d'analyse de source Java en Java ... https://qiita.com/banana5388/items/cd8a549d1885aa6dd039

Dans le commentaire de l'article précédent, vous avez souligné que "commençons par quelque chose de simple", j'ai donc commencé par obtenir simplement le nombre d'étapes qui diffèrent entre les deux codes sources.

(Ne parlez pas de réaménagement des roues !!!!!!

Donc, l'entrée et la sortie de ce que je vais créer cette fois sont comme ça.

INPUT :Chemin absolu de la source de comparaison et de la destination de comparaison
OUTPUT:Nombre d'étapes avec un code différent

spécification

Ce à quoi je pensais pour le moment, c'est quelque chose comme ça.

  1. Analyser le code obtenu pour chacune des sources de comparaison et destination de comparaison caractère par caractère
  2. Si différents caractères apparaissent entre la source de comparaison et la destination de comparaison, arrêtez la source de comparaison à la position actuelle du caractère et déplacez le caractère de destination de comparaison vers l'analyse de caractère suivante.
  3. Si le même caractère que la source de comparaison apparaît à la destination de comparaison, redémarrez l'analyse des caractères de la source de comparaison.
  4. Si un caractère de saut de ligne apparaît à la destination de comparaison alors que l'analyse des caractères de source de comparaison est arrêtée, ajoutez 1 numéro d'étape de différence.
  5. Continuez le processus de [2. --4] jusqu'à ce que les caractères de la source de comparaison ou de la destination de comparaison soient complétés.
  6. Indiquez le nombre de lignes différentes à la suite de l'analyse

Pour le moment, je l'ai implémenté tel quel.

La mise en œuvre de la partie principale ressemble à ceci.

JavaCodeDifference.java



   /**
     *Compare deux codes et renvoie le nombre de lignes correspondantes
     *
     * @param origCode Code source de comparaison (stocké dans une liste pour chaque ligne)
     * @param destCode Code comparé (stocké dans une liste pour chaque ligne)
     * @return Nombre de lignes correspondantes pour comparaison
     */
    public static int countCodeDiff(List<String> origCode, List<String> destCode) {

        int cnt = 0;

        //Générer un itérateur pour les chaînes

        //La méthode "getNotIncludeIgnoreCode" est basée sur les informations de code ligne par ligne stockées dans la liste.
        //Effacez les espaces demi-largeur, les espaces pleine largeur, les caractères de tabulation et les caractères de saut de ligne, et ajoutez un caractère de saut de ligne à la fin.
        //C'est une méthode qui renvoie finalement comme une chaîne de caractères (type String).
        StringCharacterIterator origCodeIterator =  new StringCharacterIterator(getNotIncludeIgnoreCode(origCode));
        StringCharacterIterator destCodeIterator =  new StringCharacterIterator(getNotIncludeIgnoreCode(destCode));

        //Exécuter jusqu'à la fin de la source de comparaison ou du caractère de destination de la comparaison
        while (origCodeIterator.current() != StringCharacterIterator.DONE &&
                destCodeIterator.current() != StringCharacterIterator.DONE) {

            //Augmente le nombre lorsque différents caractères de code sont inclus dans la source de comparaison et la destination de comparaison, et la destination de comparaison a d'abord un saut de ligne.
            if (origCodeIterator.current() == destCodeIterator.current()) {
                destCodeIterator.next();
                origCodeIterator.next();
            } else {
                if (destCodeIterator.current() == '\n') {
                    cnt++;
                }
                destCodeIterator.next();
            }
        }

        return cnt;
    }

Euh, n'est-ce pas un bon sentiment? ??

tester

Premier test

J'ai préparé le texte pour le test.

test1.java


aaaa
iiii
uuuu

test2.java


aaaa
iiii
uuuu

Ce n'est pas du tout un fichier java, mais pour le moment, c'est à des fins de test, est-ce que ça va? Eh bien, la sortie est. .. ..

> Number of different lines: 0

Ouais, ça a l'air bien.

Deuxième test

Un autre test

test1.java


aaaa
iiii
uuuu

test2.java


aaa
iii
uuu

Eh bien, la sortie est. .. ..

> Difference Code Line Count:3

Cela a l'air bien aussi.

Impressions

Pour le moment, je suis satisfait car il évolue selon les spécifications.

Au contraire, les spécifications sont assez lâches ... Je voudrais le réimplémenter afin qu'il puisse être utilisé.

La source est ouverte au public

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

Journal des modifications

2018/12/2 Première édition 2018/12/3 Il y avait une erreur dans la source, donc je l'ai corrigée.

Recommended Posts

J'ai créé un outil Diff pour les fichiers Java
J'ai créé un nouvel outil de déploiement Java
J'ai créé un outil de vérification pour le module de version
J'ai créé une application shopify @java
J'ai créé un outil de génération package.xml.
J'ai créé un plug-in pour IntelliJ IDEA
Création d'une méthode pour demander Premium Friday (version Java 8)
J'ai créé un programme de jugement des nombres premiers en Java
[Java] Que dois-je utiliser pour écrire des fichiers?
J'ai créé un jeu Janken en Java (CLI)
J'ai créé une image Docker pour la version japonaise de SDAPS
J'ai fait un jeu de problèmes de calcul simple en Java
J'ai fait une méthode pour demander la prime vendredi
Essayez Easy Ramdom, un outil de test PropertyBase pour Java
J'ai créé une bibliothèque pour afficher des tutoriels sur Android.
J'ai créé un Wrapper qui appelle KNP depuis Java
J'ai fait une roulette à Java.
J'ai créé une application de chat.
[Paiza] J'ai créé mon propre utilitaire pour répondre aux questions [Java]
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
J'ai étudié Randoop, un générateur de classe de test JUnit pour Java.
J'ai créé un Dockerfile pour démarrer Glassfish 5 en utilisant Oracle Java
J'ai créé un PDF avec Java.
J'ai créé une interface graphique avec Swing
J'ai fait une simple fonction de recommandation.
J'ai fait une annotation en Java.
J'ai créé une application correspondante (application Android)
[Android] J'ai créé une application de podomètre.
Je souhaite rechercher de manière récursive des fichiers dans un répertoire spécifique
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 1)
J'ai créé une source qui génère automatiquement un fichier de classe d'entité JPA
J'ai posé une question qui peut être utilisée pour des entretiens techniques
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 5):
J'ai créé un outil pour afficher la différence du fichier CSV
Une histoire que j'ai finalement comprise Java pour une déclaration en tant que non-ingénieur
[Ruby] J'ai créé un simple client Ping
Obtenir une liste de fichiers S3 avec ListObjectsV2Request (AWS SDK for Java)
[outil java] Un outil qui supprime les fichiers sous le chemin spécifié par extension
Java pour tous! J'ai lu tout le monde en Java #minjava
J'ai essayé le mappeur d'objets de Cassandra pour Java
J'avais des problèmes au travail, j'ai donc créé un plug-in IntelliJ
J'ai fait une méthode pour le vendredi premium avec une doublure
J'ai fait une mort risquée avec Ruby
J'ai créé une application Janken avec kotlin
J'ai créé une application de calculatrice sur Android
J'ai créé une application Janken avec Android
J'ai créé une classe qui peut utiliser JUMAN et KNP de Java
[LINE BOT] J'ai créé un Ramen BOT avec Java (Maven) + Heroku + Spring Boot (1)
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 2): Changer de modèle
J'ai créé un client API THETA qui peut être utilisé pour le développement de plugins
Apprendre Java avec Progate → Je vais vous expliquer parce que j'ai moi-même créé un jeu de base
J'ai créé une bibliothèque de graphiques simple pour les applications de smartphone [MP Android Chart Kai]
[Azure] J'ai essayé de créer une application Java pour la création d'applications Web gratuites - [Débutant]
Une histoire sur la prise en charge de Java 11 pour les services Web
04. J'ai fait un frontal avec SpringBoot + Thymeleaf
J'ai fait de l'art de la mosaïque avec des images Pokemon
java j'ai essayé de casser un simple bloc
[Java] Traite tous les fichiers dans un certain répertoire
Étudiez pendant 3 semaines et réussissez Java Bronze