2016-12-03 58 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

相關問題