2010-08-29 69 views
0

我編碼一個小應用程序或多或少像一個文字遊戲。 需要驗證用戶可能創建的單詞以檢查它是否是有效的英語單詞。 我想到了一些方法來實現這一點 - 1)有一個散列圖,每個英文單詞作爲一個鍵和一個布爾值作爲值。這樣我可以在用戶驗證等時搜索密鑰。 2)向像dictionary.com這樣的網站發送HTTP請求,以驗證該單詞是否存在。爪哇文字遊戲查詢

儘管HTTP請求對我來說似乎是一個很好的實現方式,但我想要一個hashmap,它首先被填充,然後以定期的時間間隔從源代碼更新,比如dictionary.com,這樣我就可以避免HTTP請求實現中涉及的延遲。

任何關於如何使用源代碼中的詞填充散列表的指針將不勝感激。

感謝 p1nG

回答

0

我不認爲檢查單詞的哈希值就足夠了。兩個單詞可能具有相同的散列。而且,隨機的字母序列可以具有與正確的單詞相同的散列值。考慮到這兩點,我認爲你不能避免檢查你的單詞(在字典中查找它)。

我不確定填充字典的最佳方式是什麼。嘗試找到免費的字典軟件,並檢查他們的許可證說他們使用的數據。我認爲購買像this這樣的產品會更容易。

如果這不是一個選項,我認爲在線處理不是一個壞的選擇。

+1

從我所理解的情況來看,當一個集合與兩個或多個具有相同散列鍵的條目發生衝突時,它會遍歷每一個檢查明文鍵以進行匹配。所以我猜猜,集合中存儲的明文密鑰也會被檢查。如果我在這裏錯了,請糾正我。 – 2010-08-29 13:27:46

+1

這是正確的。如果發生散列衝突,它將通過使用equals()方法來解決。 – Pace 2010-08-29 13:42:41

0

如何下載單詞列表。您可以使用WordNet http://wordnet.princeton.edu/wordnet/列出155,287個單詞,包含同義詞等等。

或谷歌的「英文單詞列表」的許多相關鏈接在第一頁。

0

如果您只想檢查字典中是否存在單詞,爲什麼不使用HashSet?您可以在每行上使用帶有單詞的明文字典文件,或者至少這是我過去所做的。

不確定是否需要更新它,但如果dictionary.com提供帶有詞彙列表的文件,則可以下載該文件,然後打開該文件並將每個條目添加到您的哈希映射/集合中。假設沒有詞將被刪除,現有條目將被覆蓋。

編輯:剛剛寫了一個測試程序,應該證明碰撞檢查您的單詞時不會有散列表或散列集的問題。

import java.util.HashSet; 

public class CollidingHash { 
    String value; 
    public CollidingHash(String s){ 
     value=s; 
    } 
    @Override 
    public int hashCode(){ 
     return 1; 
    } 
    @Override 
    public boolean equals(Object o){ 
     if(! (o instanceof CollidingHash)){ 
      return false; 
     } 
     CollidingHash c2 = (CollidingHash)o; 
     return value.equals(c2.value); 
    } 
    public static void main(String[] args) { 
     HashSet<CollidingHash> dict = new HashSet<CollidingHash>(); 
     CollidingHash a = new CollidingHash("This"); 
     CollidingHash b = new CollidingHash("That"); 
     dict.add(a); 
     System.out.println("Is "+ (dict.contains(b)? "Bad": "OK")); 
    } 
} 

編輯2:添加等於方法作爲佩斯提到。

0

1)有一個HashMap與每一個英語單詞 作爲一個鍵和一個布爾值作爲。 這樣我就可以在 用戶驗證等等時搜索關鍵字。

A HashMap對於這項任務是矯枉過正的。你只需要知道一個單詞是否存在,所以你可以使用HashSet。將所有單詞添加到HashSet後,您可以使用方法檢查HashSet中是否存在單詞。但是您必須意識到這是一種區分大小寫的方法,因此您必須確保所有單詞都具有相同的大小寫(例如,「hello」不會匹配「Hello」)。

此外,我不知道如何將內存密集加載到整個英文字典到內存中。如果遇到問題,更好的方法可能是在每次需要檢查字詞是否存在時掃描字典文件。

2)發送一個HTTP請求到一些站點 像dictionary.com以驗證是否 字存在與否。

這也可以,但它依賴於(1)具有活動Internet連接的計算機和(2)dictionary.com網站正在啓動。