Nella classe che gestisce i contatori, come ho detto puoi mettere un metodo es. analizzaRiga(String riga) per analizzare la riga e aggiornare i contatori.Originariamente inviato da raff5184
Mi rendo conto dell'errore concettuale relativo ai 2 scanner.. però mi blocco dopo lo scan.nextLine(); perché a questo punto non ho capito come mi consigli di contare i token.. sse è possibile evitando lo StringTokenizer
Già il fatto di passare una riga, è una riga in più e quindi il contatore delle righe va banalmente incrementato di 1.
Per numero di caratteri e numero di parole, è da valutare cosa vuoi fare. Se non puoi/vuoi (per qualunque motivo) usare classi/metodi appositi del framework (StringTokenizer, split(), regex o altro), allora la soluzione è il "parsing" della stringa "a mano".
Immaginiamo di voler separare le parole solo dagli spazi. Nulla di complicato, basta una semplice "macchina a stati" con soli 2 stati: 0 e 1 (o false/true, false = fuori dalla parola, true = dentro la parola).
Classico ciclo for per scansionare i singoli caratteri di una stringa uno per uno, charAt(i) per leggere il carattere e poi tieni una variabile che indica uno stato:
Se sei in stato 0, se trovi spazio rimani in stato 0, se trovi un non-spazio passi a stato 1.codice:" ciao come va " 0011110111101100
Se sei in stato 1, se trovi spazio passi a stato 0, se trovi un non-spazio resti in stato 1.
Il passaggio da 0 a 1 indica l'inizio di una parola, quindi incremento del contatore.
Per il numero di caratteri, se vuoi contare tutti i caratteri, allora è sufficiente length() e basta. Se invece volessi solo contare i caratteri delle parole, allora conteggi tutti i caratteri che trovi quando sei in stato 1.