我有一個語言字典(即英語,意大利語等),基本上是一個文件,每行有一個字。Java:檢查一個字符串是否在字典中
現在我想創建一個類,給出一個字符串輸入檢查該字符串是否存在該字典中的方法。
我的想法是該方法返回一個布爾值。僞代碼:
boolean checkWord(String s){
if(StringIsInDictionary) return true;
return false
}
實現該功能的最佳方式是什麼?
請考慮文件將包含~65000個字。
我有一個語言字典(即英語,意大利語等),基本上是一個文件,每行有一個字。Java:檢查一個字符串是否在字典中
現在我想創建一個類,給出一個字符串輸入檢查該字符串是否存在該字典中的方法。
我的想法是該方法返回一個布爾值。僞代碼:
boolean checkWord(String s){
if(StringIsInDictionary) return true;
return false
}
實現該功能的最佳方式是什麼?
請考慮文件將包含~65000個字。
將字典讀入Set<String>
(例如,HashSet<String>
),然後使用set.contains(word)
。
並考慮使用帶'initialCapacity'參數的'HashSet'構造函數。 http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#HashSet(int) – 2013-03-02 15:34:32
智能手機也有效嗎? – Ivan 2013-03-02 15:37:45
您可能不希望將這些單詞存儲爲每行一個單詞。一種更好的方法可能是從磁盤只讀取一次文件,將這些文件存儲在HashSet(由HashMap支持的一個集合中,這對搜索非常有效),然後使用set.contains("mystring")
。但是,這將會要求整個地圖都在內存中,但是當您需要檢查多個單詞時,它會非常高效。
然後你甚至可以返回並以更高效的方式將磁盤序列化到磁盤,從而加快了初始加載速度。
看看這個問題,我認爲它可以幫助你。 Fastest way to find a string in a text file with java
對於空間和時間有限的解決方案(例如您可能會用在智能手機上),請考慮bloom filter。那麼你不需要在手機上存儲字典,並檢查字典中的字符串將非常快。請注意,布隆過濾器可能會返回誤報,但您可以調整它以降低此風險。
這裏有幾個開放源代碼的bloom過濾器實現。一個在這裏https://github.com/magnuss/java-bloomfilter。
+1,Bloom濾波器適用於內存和性能受到限制的情況。 – Joni 2013-03-02 17:25:12
奧利其實我沒有試過任何東西。 – Ivan 2013-03-02 15:40:59