Comment calculer le nombre de Valeurs Uniques dans une ArrayList?
Je dois compter le nombre de mots uniques à partir d'un document texte à l'aide de Java. J'ai d'abord dû se débarrasser de la ponctuation dans tous les mots. J'ai utilisé le Scanner
classe à l'analyse de chaque mot dans le document et de le placer dans une Chaîne de ArrayList
.
Donc, la prochaine étape est l'endroit où je vais avoir le problème! Comment puis-je créer une méthode qui peut compter le nombre de Chaînes uniques dans le tableau?
Par exemple, si le tableau contient des apple, bob, apple, jim, bob; le nombre de valeurs uniques dans ce tableau est de 3.
public countWords() {
try {
Scanner scan = new Scanner(in);
while (scan.hasNext()) {
String words = scan.next();
if (words.contains(".")) {
words.replace(".", "");
}
if (words.contains("!")) {
words.replace("!", "");
}
if (words.contains(":")) {
words.replace(":", "");
}
if (words.contains(",")) {
words.replace(",", "");
}
if (words.contains("'")) {
words.replace("?", "");
}
if (words.contains("-")) {
words.replace("-", "");
}
if (words.contains("‘")) {
words.replace("‘", "");
}
wordStore.add(words.toLowerCase());
}
} catch (FileNotFoundException e) {
System.out.println("File Not Found");
}
System.out.println("The total number of words is: " + wordStore.size());
}
Il y a aucune restriction à ce que vous pouvez ou ne pouvez pas l'utiliser?
ne leurs sont pas de restrictions!
ne leurs sont pas de restrictions!
OriginalL'auteur | 2012-10-04
Vous devez vous connecter pour publier un commentaire.
Êtes-vous autorisé à utiliser Ensemble? Si oui, vous HashSet peut résoudre votre problème.
HashSet
n'accepte pas les doublons.size()
méthode renvoie le nombre de mots uniques.Si vous devez vraiment utiliser
ArrayList
seulement, alors un moyen d'atteindre peut-être,Voir ma réponse mis à jour.
Je n'ai pas de liste de tableaux seulement, je peux utiliser tout ce qui fonctionne. Puis-je démarrent des instances d'une nouvelle HashSet et ajouter toutes les valeurs de chaîne à partir de la liste de tableaux?
Oui, vous pouvez (ou) vous pouvez directement ajouter des éléments à Définir, de cette façon, vous n'avez même pas besoin de liste de tableaux.
OriginalL'auteur kosa
À partir de Java 8 vous pouvez utiliser
Stream
:Après l'ajout d'éléments dans votre
ArrayList
:Il convertit votre
ArrayList
à un jet et puis il ne compte que les éléments distincts.OriginalL'auteur ROMANIA_engineer
Je voudrais des conseils pour utiliser HashSet. Ce filtre automatiquement les doublons lors de l'appel de
add
méthode.OriginalL'auteur Yogendra Singh
Bien que je crois qu'un ensemble est la solution la plus simple, vous pouvez toujours utiliser votre solution originale et juste ajouter une instruction if pour vérifier si une valeur existe déjà dans la liste avant de faire votre ajouter.
Puis le nombre de mots dans votre liste est le nombre total de mots uniques (c'est à dire: wordStore.size() )
Absolument qu'il devrait être. Cependant, je voulais vous donner une option qui ne serait pas vous amener à modifier votre code existant. Vraiment, vous étiez juste en manque une instruction "if".
OriginalL'auteur Eric B.
En sténographie façon, vous pouvez le faire comme suit...
Ici, j'ai mentionné à l'écart de l'extrait de l'unique vaues de la liste du réseau. La pensée de la méthode abrégée est pratique à utiliser. Mais il est de votre préférence pour sélectionner le meilleur methos... 🙂
Très joli, merci pour le partage!
OriginalL'auteur namalfernandolk
Vous pouvez créer une table de hachage ou une table de hachage. Clés seraient vos chaînes d'entrée et la Valeur serait le nombre de fois que la chaîne se produit dans votre tableau d'entrée. O(N) le temps et l'espace.
Solution 2:
Trier la liste d'entrée.
Des chaînes similaires serait à côté de l'autre.
La liste de comparaison(i) à la liste de la(i+1) et de compter le nombre de doublons.
OriginalL'auteur FSP
OriginalL'auteur S N Prasad Rao
RÉSULTATS:
RAW: [abc, def mno, xyz, pqr, xyz, def] ; TRAITEMENT: {pqr=1, abc=1, def=2, xyz=2, mno=1}
Ce 4 ans question a déjà une réponse à l'aide de HashSet pour O(1) de la performance. Votre algorithme pour le comptage des occurrences de mots dans un tableau de chaînes, de ne pas répondre à l'OP de la question (vous n'êtes pas de comptage de valeurs uniques dans une ArrayList); ni le fait d'améliorer la solution courante. Peut-être que vous avez mal compris la question?
Merci pour les commentaires. Je m'excuse pour la confusion. Je voulais simplement faire part d'une solution pour le comptage des éléments distincts dans un tableau que j'ai trouvé intéressant et différent, et pourrait peut-être être utile à quelqu'un d'autre dans l'avenir qui peut être la recherche de solutions à un problème similaire. Je devrais probablement avoir ajouté la solution la plus appropriée fil.
OriginalL'auteur Casmon Gordon
3 solutions possibles:
Utilisation HashSet comme suggéré ci-dessus.
Créer un temporaire
ArrayList
et de stocker seul et unique élément, comme ci-dessous:Java 8 solution
OriginalL'auteur ChandraBhan Singh