Forum Programmation.java trim string replaceAll etc...

Posté par  .
Étiquettes : aucune
-2
20
mai
2012

Bonjour,
J'ai un fichier de type C (ou apparenté) à analyser et je souhaite dans un premier temps éliminer les commentaires.

public void suppressionDesCommentaires(String input, String output)
{
String output = "";

return output;
}

Comment puis écrire cela?

  • # En perl, avec des regex !

    Posté par  . Évalué à 4.

    Pardi ! :)

    Blague à part, via regex.

    Deux codes ci-dessous, parce que ton enoncé est faux (tu retournes une string, alors que la signature de la fonction est void…). Cela dit, il y a moyen que je me plante, parce que je fuis le java comme la peste (j'en ai fais pendant mes études, et j'en ai gardé une facture pour achat de RAM obligatoire en plus d'un mauvais souvenir…)

    public void suppressionDesCommentaires(String input, String output)
    {
    output = input.replaceAll( "//.*|(\"(?:\\\\[^\"]|\\\\\"|.)*?\")|(?s)/\\*.*?\\*/", "$1 " );
    return;
    }
    
    
    public String suppressionDesCommentaires(String input)
    {
    return input.replaceAll( "//.*|(\"(?:\\\\[^\"]|\\\\\"|.)*?\")|(?s)/\\*.*?\\*/", "$1 " );
    }
    
    

    Ca sort de http://stackoverflow.com/questions/1657066/java-regular-expression-finding-comments-in-code

    Pure curiosité: tu codes quoi?

    • [^] # Re: En perl, avec des regex !

      Posté par  (site web personnel) . Évalué à 3.

      Hello,

      Le type String étant immutable en java, alors ton premier exemple ne marchera pas. L'argument output ne sera en effet jamais récupéré à l'extérieur de la fonction puisqu'il est passé par valeur et non par référence. C'est une erreur assez courante des développeurs C qui passent à Java et qui s'imaginent avoir des pointeurs partout :)

      La bonne façon de faire est donc ta deuxième méthode.

      • [^] # Re: En perl, avec des regex !

        Posté par  . Évalué à 1.

        Merki pour l'info.

        Effectivement, un peu trop de C et de Perl, mais très loin de moi l'idée de passer à Java :)

    • [^] # Re: En perl, avec des regex !

      Posté par  . Évalué à -4.

      Je code un interpréteur pour fichiers POV-Ray. Les scripts ont une syntaxe proche du c.
      Pour le moment, j'en suis aux directives de pré-processeur:#define, #macro, #ifdef.
      Après je passerai aux définitions d'objets 3D.

      Tu me diras, la 3D en Java, ca doit pas roxer des max… Mais pour le moment, au contraire, ça va bien.

      Dernière version du jour:
      https://github.com/ibiiztera/emptycanvas/commit/ad6ac6b8a60de11aea474b11a19d30f561853bff#diff-0

  • # Tu attaques trop bas niveau

    Posté par  . Évalué à 2.

    Il y a une myriade d'outil qui seront bien plus efficaces pour faire ce que tu souhaites, c'est à dire travailler sur du texte: sed, awk, perl, etc.

    Java est très générique. Trop dans ton cas. Tu vas devoir pondre beaucoup plus de code que nécessaire. D'autre part, travailler en String est très contre performant.

    Si tu souhaites quand même partir avec un programme en java - pour intégrer cette fonction dans un programme plus vaste par exemple - regarde les classes Scanner ou StringTokenizer.

    Enfin, si tu veux parser des fichiers sources, je te conseille de jeter un coup d’œil à AntLR.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.