Question

Im coincé sur l'écriture occurrence mot dans une chaîne. Je suis un pourboire (dans les notes de travail) à utiliser est compareToIgnoreCase. alors j'ai essayé quelque chose comme ceci:

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

Il est bien sûr tout ce que je peux faire et probablement mauvaise façon. Quand je lance le code, je reçois parfois hors d'exeption de tableau et parfois il fonctionne. Ce qui manque est: passer par tous les mots et les vérifier et sauter les mots qui ont déjà été dénombrés. Je serai heureux d'obtenir de l'aide avec ce qui peut donc se déplacer le long et comprendre comment il peut être codé. Merci:)

Edit: Il semble que je n'ai pas expliqué le problème assez clairement, mais je reçois belle réponse sur l'objet carte qui facilement mis en place ce que je avais besoin. Je ne savais pas carte. Alors oui, je tentais de trouver le nombre de fois chaque mot donné se trouve dans la chaîne.

Tangens. Il devrait signifier-prendre le premier mot (où le premier des espaces est) splitwords [1] et le comparer à tous les autres mots splitwords string [i] et si elle est 0 (égal), puis le nombre ++

Esko: il en effet des espaces blancs comme dans la phrase. Mais j'ai toujours ce exeption. Je ne sais pas pourquoi à travers.

Était-ce utile?

La solution

Rangez les mots et leurs comptes dans 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);
}

Notez que j'ai appelé toLowerCase() avant split() que vous semblez vouloir avoir de la casse.

Autres conseils

Vous cherchez l'apparition d'un certain mot dans la phrase ou le nombre de mots cumulé des tous les mots phrase? En fonction de votre code d'exemple j'attends le premier, mais votre explication me fait penser à ce dernier.

Dans tous les cas, une chose évidente: S'il n'y a pas dans la chaîne des espaces blancs d'entrée, String#split() retourne un tableau contenant un seul élément - la chaîne d'origine lui-même. Étant donné que les indices de tableau commencent à partir de zéro, ce splitwords[1] est à l'origine du ArrayIndexOutOfBoundsException parce que la seule chaîne disponible est dans l'index [0].

Vous pouvez utiliser un ensemble et stocker chaque mot dans et à la fin obtenir la taille de l'ensemble.

Vous obtiendrez le nombre de mots différents pas nombre de mots bien sûr.

Si vous voulez compter mot occurence, vous devez utiliser un HashMap<String, Integer>. Là, vous pouvez stocker un compteur pour chaque mot trouvé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top