Java-将文本文件中的奇数和偶数单词存储到两个单独的数组列表中

时间:2016-12-03 22:50:39

标签: java arrays

到目前为止,我只输出了整个文本文件。我需要程序将偶数(具有偶数字母的单词)和奇数(具有奇数字母的单词)存储到我迄今为止创建的相应数组中...例如:3个字母单词,例如"和&# 34;应该存储到oddList []数组中。还有一个像" life"存储在evenList []中。我还需要确保如果有一个像"和"在文本文件中出现三次,我需要将它存储在oddList []。

现在,它会逐行打印文本文件中的每个单词。

2 个答案:

答案 0 :(得分:4)

提示:将问题分解为较小的问题。例如:

  1. 如何将一行分成单词。 (我猜你的十四行诗每行不止一个字。)
  2. 如何查找单词中的字符数。
  3. 如何确定数字是奇数还是偶数。 (提示 - 即初中算术 ...)
  4. 如何将某些内容放入列表中。
  5. 提示String evenList[];未声明“数组列表”。它声明了一个“字符串数组”,并没有初始化它。

    在这种情况下,应该使用数组列表。特别是ArrayList<String>

    的一个实例

    更新 - 更正。由于您希望在“列表”一词中重复删除,因此请使用集而不是列表。我建议TreeSet<String>LinkedHashSet<String>。阅读javadocs以了解其中的差异。

    提示:上面提示的大部分后续问题都可以(并且应该!)通过阅读已提到的类的javadoc来解答。

答案 1 :(得分:1)

此算法通常称为分区。在分区中,元素根据它们是否满足某些条件(称为谓词)分为2组。在这种情况下,您的条件是字符串是否具有偶数长度。

在Java 8中,您可以使用Collectors.partitioningBy开箱即用此算法。您可能希望通过寻找&#34;分区&#34;的答案来开始您的研究。将这些词分成2组。您可以使用以下答案从文件中获取单词:Extract words out of a text file。从那里,只需将单词分成两个Set s。

这听起来像是家庭作业,所以使用高级Java 8功能可能无法使用,但只是为了具有教育意义,以下是它的结构:

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);