2010-04-24 44 views
4

我可以計算出如何創建一個字符串的字符串,但我不知道如何將它們與真正的單詞字典進行比較,以檢查該字謎是否是一個真正的單詞。 Java API中是否有包含整個英文字典的類?Java Anagram求解器

回答

5

不,但您可以從various places獲取單詞列表。從那裏,你可以閱讀單詞列表文件到列表:

List<String> lines = new ArrayList<String>(); 
BufferedReader in = new BufferedReader(new FileReader("wordlist.txt")); 
String line = null; 
while (null!=(line=in.readLine())) 
{ 
    lines.add(line); 
} 
in.close(); 

最後二進制搜索您的候選詞的使用lines.contains()

+4

當像'HashSet'這樣的'Set'實現可以快得多時,沒有理由使用'O(log N)'二進制搜索。 – 2010-04-24 17:56:12

+0

超好點Alex Martelli。我不知道我在想什麼。需要咖啡。 – sblom 2010-04-24 18:08:36

1

不,你必須使用一個外部庫,如JWNL,這是共發現包裝 - 的含義組織機器可讀的詞彙數據庫,包含幾乎每一個英文單詞。

+0

我對JWNL並不熟悉,但是「意義」數據是否會將不必要的批量添加到真正只需要簡單單詞列表的應用程序中? – 2010-04-24 18:06:36

1

也許英語詞典jazzy可以幫助你。

1

在標準Java庫中沒有這樣的專門類,但是您可以使用任何您喜歡的Set接口的實現,並通過將它加載到您選擇的單詞中進行初始化,從任意無數的word lists中挑選出來在許多地方(只需仔細檢查,您選擇的單詞列表的許可證是否與您的預期應用程序兼容,例如,它是否允許商業用途,如果這是您需要的閉源應用程序等等)。

2

確定一組字符是否爲單詞的字母組合的一種方法涉及使用素數。爲每個字母指定一個素數,例如,a = 2,b = 3,c = 5,d = 7。現在預先計算字典中每個單詞的素數乘積。例如,'add'= 2 * 7 * 7 = 98或'bad'= 3 * 2 * 7 = 42.

現在確定一組字母是否是字典中的任何單詞的字母組合通過計算字母集的值來完成。例如,字母'abd'= 2 * 3 * 7 = 42 ='bad'。只需檢查預先計算的字典中是否存在字母的計算值。對於任何字謎,您只需要進行一次計算,而不是試圖產生每個可能的字謎。但請注意,此方法只適用於相對較小的單詞,否則會遇到溢出問題並需要使用BigInteger。