2016-12-03 95 views
-2

到目前为止,我只是输出了整个文本文件。我需要该程序将偶数(字母数为偶数的字)和奇数(字母数为奇数的字)存储到我迄今为止创建的相应数组中......例如:应存储3个字母词,如“和”到oddList []数组中。像“生命”这样的词存储在evenList []中。我还需要确保在文本文件中出现三次“and”这样的单词时,我需要将它存储在oddList []中。Java-将文本文件中的奇数和偶数字存储到两个独立的数组列表中

眼下,这在打印一行文本文件中每行字。

+1

欢迎堆栈溢出!看起来你正在寻求作业帮助。虽然我们本身没有任何问题,但请观察这些[应做和不应该](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),并相应地编辑您的问题。 –

+1

如果你明白你需要做什么,那么请分享你想要的步骤,并指定你不知道该怎么做的步骤(在研究之后)。 – 4castle

回答

1

该算法通常被称为分区。在一个分区中,根据元素是否满足某些条件(称为谓词)将元素分为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); 
+1

评论不适用于扩展讨论;这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/129883/discussion-on-answer-by-4castle-java-store-odd-and-even-words-from-text-文件中)。 –

4

提示:把问题分解成较小的。例如:

  1. 如何将一行分割为单词。 (我猜你的十四行诗每行有一个以上的单词。)
  2. 如何查找单词中的字符数。
  3. 如何判断一个数字是奇数还是偶数。 (提示 - 这是初中算术 ...)
  4. 如何把东西放入一个列表。

提示String evenList[];不声明一个 “数组列表”。它声明了一个“字符串数组”,它不是初始化它。

在这种情况下,你应该使用数组列表。特别是一个ArrayList<String>的实例。

UPDATE - 修正。既然你想在单词“lists”中重复消除,使用一个集合而不是一个列表。我会建议TreeSet<String>LinkedHashSet<String>。阅读javadocs以了解差异。

提示:通过阅读上面提到的类的javadoc,可以(也应该!)回答大部分后续问题。

+1

由于他们不想在列表中有任何重复,他们实际上可能需要一个'HashSet ' – 4castle

相关问题