到目前爲止,我只是輸出了整個文本文件。我需要該程序將偶數(字母數爲偶數的字)和奇數(字母數爲奇數的字)存儲到我迄今爲止創建的相應數組中......例如:應存儲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