Bonjour,
voilà je dois lire un fichier en java et ne pas afficher les lignes de commentaires commençant par // comment faire svp??
Version imprimable
Bonjour,
voilà je dois lire un fichier en java et ne pas afficher les lignes de commentaires commençant par // comment faire svp??
bonjour,
il suffit de lire le fichier ligne par ligne et ensuite pour chaque ligne d'appeler la méthode "startWith" pour vérifier si la ligne commence par //
Salut,
J'ai une petite méthode qui le fait, mais uniquement avec les // (où qu'il soient), mais pas encore avec les */ /*
L'appel:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public static String supComm(String ligne) // static si appel depuis main { boolean encore = true; int ind1 = 0; int ind2 = 0; String newLigne = ""; while(encore) { encore = false; ind1 = ligne.indexOf("//"); if(ind1 == -1) { newLigne = ligne; } else { ind2 = ligne.lastIndexOf("//"); if(ind2 != -1) { newLigne = ligne.substring(0, ind2); encore = true; ligne = newLigne; } } }
La méthode ne traite pas la lecture du fichier.Code:
1
2
3
4
5
6 String ligneNew = ""; //System.out.println("\nligneLue: " + ligneLue); ligneNew = supComm(ligneLue); System.out.println("ligneNew: " + ligneNew)
Cordialement,
Dan
désolé mais ton code m'a un peu écorché les yeux 8O
Alkhan t'a dit d'utiliser la fonction startWith ...
Pourquoi recherche deux fois //?
Si tu veux recherche // , n'importe où le indexOf suffi ;)
Un code qui devrait marcher (attention non testé)
Ca vient directement de la FAQ à une ligne près
boucle alternativeCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 String filePath = "g:\\fichier.txt"; try{ // Création du flux bufférisé sur un FileReader, immédiatement suivi par un // try/finally, ce qui permet de ne fermer le flux QUE s'il le reader // est correctement instancié (évite les NullPointerException) BufferedReader buff = new BufferedReader(new FileReader(filePath)); try { String line; // Lecture du fichier ligne par ligne. Cette boucle se termine // quand la méthode retourne la valeur null. while ((line = buff.readLine()) != null) { if (!line.startsWith("//")){ System.out.println(line); } } } finally { // dans tous les cas, on ferme nos flux buff.close(); } } catch (IOException ioe) { // erreur de fermeture des flux System.out.println("Erreur --" + ioe.toString()); }
Pour ceux qui est des */ /* c'est un poil plus compliqué et ça va dépendre de tes consignes (doit on effacer directement tout ce qu'il y a après un */ ou faut il vérifier que la balise est bien fermé).Code:
1
2
3
4
5
6
7 while ((line = buff.readLine()) != null) { if (line.indexOf("//")>0){ System.out.println(line.substring(0, line.indexOf("//"))); }else{ System.out.println(line); } }
(au fait il existe plein d'autres méthodes une, un peu plus violente, serait d'utiliser des split)
(pas taper moi et mes méthodes de bourrin :aie:)
bonne soirée
Voilà j'ai réussi à faire ce truc avec la méthode startswith comme l'a expliqué Alkhan et aussi j'ai réussi à le faire avec les expressions régulières et voici mon code:
Merci à tous pour votre aide... :ccool:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 static void lecture(Scanner source) { Pattern p = Pattern.compile("^(//){1}"); while(source.hasNextLine()) { String line = source.nextLine(); Matcher m= p.matcher(line); if (m.lookingAt()){} else System.out.println(line); } }
Re,
@ xme:
La boucle "du code" ne fonctionne que si les // sont au début de la ligne.
La boucle alternative est bonne sauf qu'il faut que les // ne soient pas au début c a d en position 0
il suffit de modifier
enCode:if (line.indexOf("//")>0){
Cordialement,Code:if (line.indexOf("//")>-1){
Dan