Originariamente inviato da VincenzoTheBest
Ti basta definire la tua istanza di HashMap in questo modo:
codice:
HashMap<String, Integer> map = new HashMap<String, Integer>();
poi, mentre scorri il file:
se la get ti restituisce null, fai una put della stringa assegnando il valore 1,
altrimenti fai una put della stringa incrementando il suo valore.
allora sto andando avanti così e credo proprio che questa struttura dati sia la migliore, mille grazie!!
Mi rimane ancora un problema che non riesco a capire, passo il codice:
recupero parola e carica dell'HashMap
codice:
//recupero la parola e elimino \n
riga=scanSq.nextLine();
word= riga.substring(0, riga.length()-2);
//costruttore della classe parola: string caratteri=word , int volte=1
ParolaF parol= new ParolaF(word);
if (tabellHash.containsKey(word)) {
//metodo aggiungVolta() volte++ (riferito alla parola in analisi)
parol.aggiungVolta();
//stampa di controllo
System.out.println("trovata parola "+word+" gia' "+parol.numVolte()+" volte");
tabellHash.put(word, parol.numVolte());
//stampa di controllo
System.out.println("Reinserita parola "+word+" con valore: "+parol.numVolte());
}
else {
i++;
tabellHash.put(word, parol.numVolte());
System.out.println("inserita parola numero "+i);
}
Metodo cercaParole (dovrebbe ritornare 0 se la parola non è presente altrimenti le volte in cui la parola appare nel documento. Devo passare un array perchè la ricerca deve essere potuta fare anche su array di parole. In questo caso il risultato finale è la somma delle occorrenze di TUTTE le parole ricercate)
codice:
public int cercaParole(String[] lista){
int size= lista.length;
for (int i= 0; i < size; i++) {
if (tabellHash.get(lista[i]) == null)
return risultato;
else
risultato= tabellHash.get(lista[i])+risultato;
}
return risultato;
}
a quanto ho capito questo dovrebbe funzionare correttamente ma in un file tipo:
riga1
giovani
caccasauro
riga1
riga1
per una ricerca sopra la parola riga1 mi fornisce come risultato 2 e mi stampa negli output di controllo:
inserito valore numero 1
inserito valore numero 2
inserito valore numero 3
trovata parola riga1 già 2 volte
reinserisco riga1 con nuovo valore 2
trovata parola riga1 già 2 volte
reinserisco riga1 con nuovo valore 2
//e come risultato ovviamente ottengo:
La parola è presente 2 volte
perchè mi restituisce 2 e non 3? perchè al secondo controllo positivo non aumenta il "volte"??