[英]count # of repeated words in a text file using java
如何從路徑中打開java中的文本文件,並使用標記器計算文件中重復的單詞數。
例如:想要使用路徑名打開文件,並且要讀取和計算文件中重復的單詞
badpanda是半右的:有很多關於如何從文件中讀取單詞的信息。 不要接受他使用ArrayLists的建議 - 你只需要一個Map實現(HashMap或TreeMap)。 每個鍵都是文件中的一個單詞,每個值都是該單詞的當前計數。
由於這是家庭作業,這里有一些提示:
Scanner
類可用作標記器 Multiset
(或Bag
)可用於計算單詞 關於可以采取的方法的一些細節。
掃描器作為令牌生成器
Scanner
類使用諸如InputStream
或File
類的源,並且可以使用許多可用的next
方法之一一次讀取一條數據。
如果我們想將Scanner
用作標記器,我們可以告訴它應該分割文本以制作標記的方式。
有一個Scanner.useDelimiter(String)
或Scanner.useDelimiter(Pattern)
方法,可以通過使用正則表達式告訴Scanner
以某種方式拆分令牌。
正確配置Scanner
,可以通過調用next
方法獲取令牌,直到我們用完文本文件中的文本為止。 (此循環的終止條件可以由Scanner.hasNext
確定。)
使用Multiset
(或Bag
)計算單詞
稱為多集 (或包 )的數據結構可用於跟蹤可能已發生的單詞(或標記)。
多重集是一個集合 ,但每個元素可以有多個元素。 在我所看到的實現中,通過調用某些方法可以使集合中的元素具有多重性。
例如,使用Google的Guava庫中提供的Multiset
實現, Multiset.count(Object)
方法將返回給定對象的多重性。
那么,這意味着什么?
我們可以使用Multiset
來跟蹤由Scanner
讀取的文本文件中出現的令牌計數。
通過將標記從Scanner
放入Multiset
,我們可以得出在文本文件中遇到每個標記的次數的計數。
從那里,我們可以遍歷令牌,並找到計數超過2
的令牌,這些令牌是在文本文件中重復的令牌。
另一種方法?
從問題的另一種解釋來看,這是另一種選擇:
...並計算文件中重復的單詞數量......
如果我們僅需要嚴格的“重復單詞計數”,那么就有另一種方法。
Set
可以用於跟蹤文件中已經遇到的令牌。
在每個新令牌上,在我們嘗試add
令牌add
到Set
,我們可以使用Set.contains(Object)
方法檢查令牌是否已經存在。
如果單詞已經存在,那么我們可以增加一個計數器來跟蹤重復的標記。
如果這不是問題的意圖,那么應該指出,使用精確的措辭來傳達意圖很重要,因為閱讀該問題的人可以用許多不同的方式來解釋該問題! ;)
了解如何通過谷歌搜索路徑中的文件流(下面是我找到的第一個鏈接;如果它不好,還有更多......)。
http://www.homeandlearn.co.uk/java/read_a_textfile_in_java.html
然后,創建一個arraylists的arraylist。 為每個新單詞添加一個條目(即將0索引設置為單詞的新arraylist)到初始arraylist,並為每個重復單詞添加一個條目到相應的arraylist。 完成整個文本文檔后,根據需要遍歷arraylist。
忘記令牌生成器
只需使用String.split方法。 它將字符串拆分為String數組,並且無需使用tokenizer類。
使用掃描儀讀取文件中的各行。
使用哈希表來計算單個單詞,這假設單詞上的額外標點符號無關緊要。
掃描程序完成文件讀取后,顯示值大於1的每個鍵/值對。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.