Java-stocker des mots impairs et pairs à partir d'un fichier texte dans deux listes de tableaux distinctes


Jusqu'à présent, je viens de sortir le fichier texte entier. J'ai besoin du programme pour stocker even (mots avec un nombre pair de lettres) et odd(mots avec un nombre impair de lettres) dans les tableaux respectifs que j'ai créés jusqu'à présent... par exemple: 3 mots de lettre tels que "et" doivent être stockés dans le tableau oddList []. Et un mot comme" vie " stocké dans evenList[]. Je dois également m'assurer que si un mot comme " et " apparaît trois fois dans le fichier texte, je dois le stocker UNE FOIS dans la oddList[].

Droite maintenant, cela s'imprime chaque mot dans le fichier texte ligne par ligne.

Author: A.Adams, 2016-12-04

2 answers

Cet algorithme est souvent appelé une partition. Dans une partition, les éléments sont classés en 2 groupes selon qu'ils remplissent ou non une condition (appelée prédicat). Dans ce cas, votre condition est de savoir si la chaîne a une longueur égale ou non.

Dans Java 8, cet algorithme est disponible pour vous prêt à l'emploi avec Collectors.partitioningBy. Vous voudrez peut-être commencer votre recherche en recherchant des réponses en termes de "partitionnement" des mots en 2 ensembles. Vous pouvez obtenir les mots de la fichier en utilisant cette réponse: Extraire des mots d'un fichier texte . De là, il suffit de partitionner les mots en deux Sets.

Cela ressemble à un devoir, donc l'utilisation des fonctionnalités avancées de Java 8 peut ne pas être disponible pour vous, mais juste pour être éducatif, voici comment cela serait structuré:

Predicate<String> hasEvenLength = (String word) -> word.length() % 2 == 0;

Map<Boolean,Set<String>> partition =
    Files.lines(Paths.get(fileName))                       // get the lines
         .flatMap(Pattern.compile("\\W+")::splitAsStream)  // split the lines into words
         .collect(Collectors.partitioningBy(hasEvenLength, // parition by even length
             Collectors.mapping(String::toUpperCase,       // uppercase
                 Collectors.toCollection(TreeSet::new)))); // put into sorted set

Set<String> evenWords = partition.get(Boolean.TRUE);
Set<String> oddWords = partition.get(Boolean.FALSE);
 1
Author: 4castle, 2017-05-23 12:08:50

Astuce : divisez le problème en plus petits. Par exemple:

  1. Comment diviser une ligne en mots. (Je suppose qu'il y a plus d'un mot par ligne de votre sonnet.)
  2. Comment trouver le nombre de caractères dans un mot.
  3. Comment décider si un nombre est impair ou pair. (Indice - c'est arithmétique de l'école junior ...)
  4. Comment mettre quelque chose dans une liste.

Indice: String evenList[]; ne déclare pas de "liste de tableaux". Il est déclarer un "tableau de chaîne", et il ne l'initialise PAS.

Dans ce cas, vous devriez utiliser une liste de tableaux. Plus précisément une instance de ArrayList<String>.

MISE À JOUR - Correction. Puisque vous voulez éliminer les doublons dans le mot "listes", utilisez un ensemble plutôt qu'une liste. Je suggère soit TreeSet<String> ou LinkedHashSet<String>. Lisez les javadocs pour comprendre la différence.

Astuce: La plupart des questions de suivi découlant de mes conseils ci-dessus peuvent (et devraient!) soyez répondu en lisant les javadocs des classes qui ont été mentionnées.

 4
Author: Stephen C, 2016-12-03 23:02:58