Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Contare numero linee file java tranne i commenti

    Salve a tutti,
    come da titolo vorrei scrivere un programma che mi conti le linee di codice di un file .java passato in input tranne i commenti.
    Per ora ho scritto questo programma che mi conta tutte le linee di un file, commenti compresi.

    codice:
    package main;
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.LineNumberReader;
    
    public class CountLine {
    	
    	LineNumberReader reader;
    	int numberLine;
    	
    	public CountLine(String pathFile){
    		try {
    			this.reader = new LineNumberReader (new FileReader (pathFile));
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    
    	}
    	
    	public int numberOfLine(){
    		String lineRead = ""; 
    		try {
    			while ((lineRead = reader.readLine()) != null) {}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
    		numberLine = reader.getLineNumber();  
    		try {
    			reader.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
    		return numberLine;
    	}
    }
    Il path del file viene passato all'invocazione del costruttore della classe.
    Grazie anticipatamente per l'aiuto.

  2. #2

    Re: Contare numero linee file java tranne i commenti

    codice:
    	public int numberOfLine(){
    		String lineRead = ""; //ciao sono un commento
    		try {
    			while ((lineRead = reader.readLine()) != null) {}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
    		numberLine = reader.getLineNumber();  /* inizio qui
    		try {
    			reader.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} e finisco qui*/
    		return numberLine;
    	}
    Ciao, domanda preventiva: come pensi di procedere nei due casi sopra? Quante righe dovrebbe contare il tuo programma?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Scusa ma a quali casi ti riferisci? Il programma conta tante linee quante sono le righe di codice scritte nelle classi analizzate...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da stefano085
    Scusa ma a quali casi ti riferisci?
    Si riferisce al codice che ha postato lui, dove ci sono, appunto, due tipi di commento piuttosto particolari.

    Se tu dessi in pasto al tuo programma, un file Java con il codice che ha postato lui, cosa vorresti che il tuo programma restituisse?

    Analizza bene il codice che ha postato unomichisiada.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Io vorrei che non venissero contate tutte le linee di codice commentate e che quindi non vengono eseguite. Quindi tutte quelle comprese tra /*......*/ e tutte quelle precedute da //.

    Spero così di essere stato più chiaro.

  6. #6
    Originariamente inviato da stefano085
    Io vorrei che non venissero contate tutte le linee di codice commentate e che quindi non vengono eseguite. Quindi tutte quelle comprese tra /*......*/ e tutte quelle precedute da //.

    Spero così di essere stato più chiaro.
    In una versione ingenua direi:
    -scorri le righe una per una
    -per ogni riga controlli se è presente il // ,se non è presente conti la riga, se è presente controlli se è preceduto da qualche carattere (non ti tabulazione) e in caso contrario scarti la riga
    -se non è presente // ma è presente /* allora anche qui controlli se è preceduto da caratteri non di tabulazione e in caso contrario scarti la riga, inoltre imposti un flag che ti fa scartare tutte le righe da li in poi finché non incontri la chiusura */, quando la incontri devi valutare se scartare o meno la riga in cui la incontri controllando se ci sono altre istruzioni dopo di essa.

    Tutto ciò però è un algoritmo ingenuo perché non tiene conto delle seguenti considerazioni:

    -il file java potrebbe non essere ben formato e quindi ad esempio avere coppie /* e */ non bilanciate , ciò farebbe ovviamente fallire l'algoritmo sopra
    -nel file potrebbero essere presenti situazioni particolari del tipo:

    codice:
    /*
    .....
    codice
    ....
    //codice
    */
    o anche

    codice:
    //  codice   /*  codice  */
    codice:
    /*  codice   /*  codice  */ */

    che vanno gestite...
    Insomma direi che ci devi pensare un po su, poi posti un algoritmo completo (o ancora meglio il codice) e ti si faranno eventuali obiezioni /correzioni o ti si daranno suggerimenti per considerare casistiche che hai ignorato eventualmente.

    Sicuramente avere la certezza che si tratti di un file che compila ti semplifica le cose perché le anomalie quali commenti con chiusure non bilanciate o casi come il terzo esempio non possono verificarsi e non vanno gestiti.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Oh grazie mille....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.