Domanda

Im bloccato sulla scrittura verificarsi Word in una stringa. Ho avuto qualche punta (nelle note attività) da usare è compareToIgnoreCase. così ho provato qualcosa di simile:

splitwords = StringCont.split("\\s");
for(int i=0; i<splitwords.length; i++)
{
    if(splitwords[1].compareToIgnoreCase(splitwords[i]) == 0)
        splitcount++;
}

E 'naturalmente solo quello che posso fare e il modo probabilmente male. Quando eseguo il codice, ottengo a volte fuori della gamma exeption e, a volte si corre. Ciò che manca è: passare attraverso tutte le parole e controllare e saltare le parole che erano già contati. Sarò felice di ottenere alcun aiuto con questo modo può muoversi avanti e capire come può essere codificato. Grazie:)

Edit: Sembra che non mi spiego il problema con sufficiente chiarezza, ma ottengo bella risposta circa l'oggetto mappa che facilmente mettere insieme quello che mi serviva. Non sapevo di mappa. Quindi sì, stavo cercando di trovare il numero di volte in cui ogni parola data si trova nella stringa.

tangens:. Dovrebbe significare-prendere la prima parola (dove prima gli spazi bianchi è) splitwords [1] e confrontarlo con tutte le altre parole splitwords string [i] e se è 0 (uguale), quindi count ++

Esko: ci sono infatti spazi bianchi, come in frase. Ma ho ancora ottenuto questo exeption. Non so perché thru.

È stato utile?

Soluzione

Conservare le parole e la loro conta in un Map .

String[] words = string.toLowerCase().split("\\s+");
Map<String, Integer> wordCounts = new HashMap<String, Integer>();

for (String word : words) {
    Integer count = wordCounts.get(word);
    if (count == null) {
        count = 0;
    }
    wordCounts.put(word, count + 1);
}

Si noti che ho chiamato prima di toLowerCase() split() come sembri desidera avere tra maiuscole e minuscole.

Altri suggerimenti

Sei alla ricerca per il verificarsi di una certa parola nella frase o il conteggio delle parole cumulato delle tutte le parole frase? Sulla base della sua codice di esempio che mi aspettavo, ma l'ex tua spiegazione mi fa pensare di quest'ultimo.

In ogni caso, qualcosa di ovvio: se non ci sono spazi bianchi nella stringa di input, String#split() restituisce un array contenente un solo elemento - la stringa originale in sé. Poiché indici di matrice iniziano da zero, che splitwords[1] causa il ArrayIndexOutOfBoundsException perché l'unico String disponibile è nell'indice [0].

È possibile utilizzare un set e memorizzare ogni parola in e alla fine ottenere la dimensione del set.

Si otterrà il numero di parola diversa non numero di parola , naturalmente.

Se si desidera contare parola verificarsi, è necessario utilizzare un HashMap<String, Integer>. Ci si può memorizzare un contatore per ogni parola trovata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top