到目前为止,我只输出了整个文本文件。我需要程序将偶数(具有偶数字母的单词)和奇数(具有奇数字母的单词)存储到我迄今为止创建的相应数组中...例如:3个字母单词,例如"和&# 34;应该存储到oddList []数组中。还有一个像" life"存储在evenList []中。我还需要确保如果有一个像"和"在文本文件中出现三次,我需要将它存储在oddList []。
中现在,它会逐行打印文本文件中的每个单词。
答案 0 :(得分:4)
提示:将问题分解为较小的问题。例如:
提示: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);