ConteggioParole.java
Created with JBuilder |
// Questa classe contiene diversi metodi per il conteggio di parole
// in una frase contenuta in un oggetto String
// - contaParole: la procedura per il conteggio delle parole mostrata
// nell'unità didattica 4 (ha il problema che il conteggio parole è
// sbagliato se la frase contiene spazi in fondo)
// - contaParoleTrim: una soluzione corretta al conteggio delle parole
// in una frase che utilizza il metodo trim della classe String
// - contaParoleNoTrim: una soluzione corretta al conteggio
// delle parole in una frase che *non* utilizza il metodo trim di String
// - contaParoleECaratteri: conteggio di parole e caratteri alfabetici
// - cercaNumeroDi: ricerca del numero di occorrenze di un dato carattere
// - cercaNumeroDiIndexOf: come sopra, con l'utilizzo del metodo indexOf
// della classe String
import javabook.*;
class ConteggioParole {
// Oggetti per l'IO
private static MainWindow finestra;
private static InputBox richiestaDati;
private static OutputBox uscitaDati;
// La frase richiesta in ingresso su cui eseguire i metodi
private static String frase;
public static void main(String[] args) {
// Inizializzo gli oggetti per l'IO e la frase da manipolare
inizializzaIO();
inizializzaFrase();
// Creo uno StringBuffer per contenere i risultati dell'analisi
StringBuffer risultati = new StringBuffer("");
risultati.append("Hai inserito la frase: " + frase + "\n");
risultati.append("che consta di " + frase.length() + " caratteri.\n");
// Ogni metodo restituisce un messaggio
risultati.append(contaParole());
risultati.append(contaParoleTrim());
risultati.append(contaParoleNoTrim());
risultati.append(contaParoleECaratteri());
// Non c'è un metodo di InputBox per richiedere un carattere
// Chiedo una String e poi prendo solo il primo carattere
String temp = richiestaDati.getString("Inserisci un carattere: ");
char c = temp.charAt(0);
// Invoco gli ultimi due metodi (che necessitano di c)
risultati.append(contaNumeroDi(c));
risultati.append(contaNumeroDiIndexOf(c));
// Mostro i risultati (il metodo print accetta uno StringBuffer)
uscitaDati.print(risultati);
uscitaDati.show();
}
// Metodo di conteggio delle parole (base)
private static String contaParole() {
int nc = frase.length();
int indice = 0, numeroParole = 0;
while (indice < nc) {
// ignora gli spazi bianchi
while ((indice < nc) && (frase.charAt(indice) == ' ')) {
indice++;
}
// trova la fine della parola
while ((indice < nc) && (frase.charAt(indice) != ' ')) {
indice++;
}
// un'altra parola trovata, incremento del contatore
numeroParole++;
}
return ("(contaParole) Numero di parole: " + numeroParole + "\n");
}
// Conteggio parole corretto con l'uso di trim
private static String contaParoleTrim() {
String temp = frase.trim();
int nc = temp.length();
int indice = 0, numeroParole = 0;
while (indice < nc) {
// ignora gli spazi bianchi
while ((indice < nc) && (temp.charAt(indice) == ' ')) {
indice++;
}
// trova la fine della parola
while ((indice < nc) && (temp.charAt(indice) != ' ')) {
indice++;
}
// un'altra parola trovata, incremento del contatore
numeroParole++;
}
return ("(contaParoleTrim) Numero di parole: " + numeroParole + "\n");
}
// Conteggio parole corretto senza l'uso di trim
private static String contaParoleNoTrim() {
int nc = frase.length();
int indice = 0, numeroParole = 0;
while (indice < nc) {
// ignora gli spazi bianchi
while ((indice < nc) && (frase.charAt(indice) == ' ')) {
indice++;
}
// Controllo aggiuntivo per evitare l'incremento del
// numero di parole in presenza di spazi a fine frase
if (indice < nc) {
// trova la fine della parola
while ((indice < nc) && (frase.charAt(indice) != ' ')) {
indice++;
}
// un'altra parola trovata, incremento del contatore
numeroParole++;
}
}
return ("(contaParoleNoTrim) Numero di parole: " +
numeroParole + "\n");
}
// Conteggio di parole e caratteri
private static String contaParoleECaratteri() {
String temp = frase.trim();
int nc = temp.length();
int indice = 0, numeroParole = 0, numeroCaratteri = 0;
while (indice < nc) {
// ignora gli spazi bianchi
while ((indice < nc) && (temp.charAt(indice) == ' ')) {
indice++;
}
// trova la fine della parola
while ((indice < nc) && (temp.charAt(indice) != ' ')) {
char c = temp.charAt(indice);
if ((c >= 'A' && c <= 'Z') ||
(c >= 'a' && c <= 'z')) {
// un'altro carattere trovato, incremento del contatore
numeroCaratteri++;
}
indice++;
}
// un'altra parola trovata, incremento del contatore
numeroParole++;
}
return ("(contaParoleECaratteri) Numero di parole: " + numeroParole +
" Numero di caratteri: " + numeroCaratteri + "\n");
}
// Questo metodo cerca il numero di occorrenze di un dato carattere
private static String contaNumeroDi(char c) {
int numeroOccorrenze = 0;
for(int i = 0; i < frase.length(); ++i) {
if (frase.charAt(i) == c) {
++numeroOccorrenze;
}
}
return ("(contaNumeroDi) Il numero di occorrenze del carattere " + c +
" è pari a: " + numeroOccorrenze + "\n");
}
// Questo metodo cerca il numero di occorrenze di un dato carattere
// usando il metodo indexOf della classe String
private static String contaNumeroDiIndexOf(char c) {
int numeroOccorrenze = 0;
int posizione = frase.indexOf(c);
while (posizione >= 0) {
++numeroOccorrenze;
posizione = frase.indexOf(c,posizione + 1);
}
return ("(contaNumeroDiIndexOf) Il numero di occorrenze del carattere "
+ c + " è pari a: " + numeroOccorrenze + "\n");
}
// Questo metodo crea gli oggetti necessari per gli IO
// e li memorizza nei relativi attributi. Rende inoltre visibile
// la finestra dell'applicazione
private static void inizializzaIO() {
// Dichiaro e creo gli oggetti necessari per l'IO
finestra = new MainWindow("Elaborazione testi");
richiestaDati = new InputBox(finestra, "Inserimento dati");
uscitaDati = new OutputBox(finestra, "Risultati");
// Rendo visibile la finestra principale
finestra.show();
}
// Questo metodo richiede i coefficienti e crea il polinomio
private static void inizializzaFrase() {
// Richiedo la frase su cui eseguire le elaborazioni
frase = richiestaDati.getString("Inserisci una frase: ");
}
}
ConteggioParole.java
Created with JBuilder |