到目前为止,我只是输出了整个文本文件。我需要该程序将偶数(字母数为偶数的字)和奇数(字母数为奇数的字)存储到我迄今为止创建的相应数组中......例如:应存储3个字母词,如“和”到oddList []数组中。像“生命”这样的词存储在evenList []中。我还需要确保在文本文件中出现三次“and”这样的单词时,我需要将它存储在oddList []中。Java-将文本文件中的奇数和偶数字存储到两个独立的数组列表中
眼下,这在打印一行文本文件中每行字。
到目前为止,我只是输出了整个文本文件。我需要该程序将偶数(字母数为偶数的字)和奇数(字母数为奇数的字)存储到我迄今为止创建的相应数组中......例如:应存储3个字母词,如“和”到oddList []数组中。像“生命”这样的词存储在evenList []中。我还需要确保在文本文件中出现三次“and”这样的单词时,我需要将它存储在oddList []中。Java-将文本文件中的奇数和偶数字存储到两个独立的数组列表中
眼下,这在打印一行文本文件中每行字。
该算法通常被称为分区。在一个分区中,根据元素是否满足某些条件(称为谓词)将元素分为2组。在这种情况下,您的条件是该字符串是否具有均匀长度。
在Java 8中,此算法是提供给您外的开箱即用的Collectors.partitioningBy
。您可能希望通过按照将这些词“划分”为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);
评论不适用于扩展讨论;这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/129883/discussion-on-answer-by-4castle-java-store-odd-and-even-words-from-text-文件中)。 –
提示:把问题分解成较小的。例如:
提示:String evenList[];
不声明一个 “数组列表”。它声明了一个“字符串数组”,它不是初始化它。
在这种情况下,你应该被使用数组列表。特别是一个ArrayList<String>
的实例。
UPDATE - 修正。既然你想在单词“lists”中重复消除,使用一个集合而不是一个列表。我会建议TreeSet<String>
或LinkedHashSet<String>
。阅读javadocs以了解差异。
提示:通过阅读上面提到的类的javadoc,可以(也应该!)回答大部分后续问题。
由于他们不想在列表中有任何重复,他们实际上可能需要一个'HashSet
欢迎堆栈溢出!看起来你正在寻求作业帮助。虽然我们本身没有任何问题,但请观察这些[应做和不应该](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),并相应地编辑您的问题。 –
如果你明白你需要做什么,那么请分享你想要的步骤,并指定你不知道该怎么做的步骤(在研究之后)。 – 4castle