Java: la Suppression des commentaires de la chaîne
J'aimerais faire une fonction qui renvoie une chaîne et dans le cas où il a des commentaires en ligne il le supprime. Je sais que cela semble assez simple, mais je veux assurez-vous que im faire de ce droit, par exemple:
private String filterString(String code) {
//lets say code = "some code //comment inside"
//return the string "some code" (without the comment)
}
J'ai pensé à 2 manières: n'hésitez pas à avis contraire
- Itération de la chaîne et de trouver des double inline entre parenthèses et en utilisant la méthode sous-chaîne.
- regex.. (je suis pas si sûr de combat)
u peut me dire quelle est la meilleure façon et de me montrer comment il devrait être fait? (merci de ne pas les conseils trop de solutions avancées)
édité: cela peut-il être fait en quelque sorte avec Scanner objet? (im en utilisant cet objet, de toute façon)
OriginalL'auteur Popokoko | 2011-12-24
Vous devez vous connecter pour publier un commentaire.
Pour trouver la sous-chaîne avant une constante de chaîne à l'aide d'une expression régulière de remplacement est un peu beaucoup.
Vous pouvez le faire en utilisant
indexOf()
pour vérifier la position du début de commentaire etsubstring()
pour obtenir la première partie, quelque chose comme:Cela ne marchera pas pour votre propre code, sa va enlever les "// commentaire" au sein de la chaîne.
Que diriez - / * * / commentaires?
Je n'ai pas besoin de gérer /** commentaires 🙂 j'ai vérifié cette solution, il fonctionne très bien!
façon trop simpliste -- se déforme quelque chose comme:
String url="http://www.google.com";
OriginalL'auteur rsp
Si vous voulez un plus efficace regex pour vraiment correspondre à tous les types de commentaires, utilisez celui-ci :
source : http://ostermiller.org/findcomment.html
EDIT:
Une autre solution, si vous n'êtes pas sûr au sujet de l'utilisation de regex est de concevoir un petit automates comme suit :
Vrai, merci de le remarquer, je n'ai pas beaucoup d'attention à ces affaires comme ils l'étaient sans importance pour moi à l'époque j'ai eu ce problème (et posté cette réponse) Une adaptation de la solution pour garder les commentaires dans la chaîne de déclaration ne devrait pas être trop difficile à atteindre, et en particulier pour la deuxième solution.
OriginalL'auteur Loïc Gammaitoni
La meilleure façon de le faire est d'utiliser des expressions régulières.
D'abord de trouver la
/**/
commentaires et supprimer tous les//
commnets. Par exemple:OriginalL'auteur maks
Suffit d'utiliser la replaceAll méthode de la classe String, combiné avec un simple expression régulière. Voici comment le faire:
La clé est la ligne:
La regex //.*?\n correspond à des chaînes de départ avec // jusqu'à la fin de la ligne.
Et si vous voulez voir ce code en action, rendez-vous ici: http://www.ideone.com/e26Ve
Espère que cela aide!
La ligne devrait lire s = s.replaceAll("//.*?\n","\n"); je vais éditer le post et de le corriger. La solution que vous avez "choisi" de ne pas fonctionner correctement sur plusieurs lignes de cordes, comme l'exemple que vous avez donné.
L'expression régulière de la solution et la solution que vous avez donné va détruire le code source qui contient le commentaire de démarrage des séquences de caractères à l'intérieur des littéraux de Chaîne.
OriginalL'auteur user361676
@Christian Hujer a été correctement en soulignant que de nombreux ou toutes les solutions posté échouer si les commentaires se produire au sein d'une chaîne.
@Loïc Gammaitoni suggère que ses automates approche pourrait facilement être étendu pour gérer ce cas. Ici, c'est que l'extension.
OriginalL'auteur mab
pour scanner, utiliser un délimiteur,
délimiteur exemple.
Utiliser un générateur de jetons pour une normale de chaîne
générateur de jetons:
scanner.useDelimiter("//");
J'ai vu u vient d'ajouter une autre partie à ur suggestion, merci bien, mais ce n'est toujours pas répondre à mon problème, je voulais faire une fonction clean, je ne vois pas comment il aide.
OriginalL'auteur Russell
J'ai fait un open source bibliothèque (sur GitHub) à cette fin , elle est appelée CommentRemover vous pouvez supprimer la ligne simple et multiple de la ligne de Java Commentaires.
Il prend en charge retirer ou de ne PAS enlever les tâches.
Aussi, il prend en charge JavaScript , HTML , CSS , des Propriétés , des JSP et XML Commentaires trop.
Petit extrait de code comment l'utiliser (Il y a 2 type d'utilisation):
Première InternalPath
Deuxième façon ExternalPath
vous souhaitez obtenir une liste des classes que leurs commentaires supprimés si donc il n'y a pas de fonctionnalité. Mais si il y a quelque chose va mal, la bibliothèque affiche une liste des classes qui n'a pas pu être supprimé.
Cela fonctionne vraiment bien. Si vous voulez tout simplement à exécuter pour un chemin externe, vous n'avez même pas besoin d'ajouter le "setExcludePackages' setter. J'ai cloné et qu'elle était en mesure d'exécuter le chemin externe exemple après le retrait de la setExcludePackages' setter sans aucun problème.
bon à savoir, merci pour l'aide!
OriginalL'auteur Ertuğrul Çetin