我正在进行拼写检查。我已经实现了接收单词列表的哈希表,但现在我必须编写五种用于生成可能的单词建议的技术。其中之一是
例如:
我有“bob”这个词......我想能够在(az)b(az)o(az)b(az)之间插入一个字符,以查看我是否可以获得一个可能的新单词拼写单词拼写错误的可能建议
这是我到目前为止所做的......但是不起作用
public static void main(String[] args) {
String word = "evelina";
char[] wordCharArr = word.toCharArray();
for(int i=0; i < wordCharArr.length ; i++) {
//char temp1 = wordCharArr[i];
for(char j = 'A'; j <= 'Z' ; j++) {
word.substring(j);
}
}
}
答案 0 :(得分:0)
您的问题出在for循环中。而不是仅仅循环查看您正在检查的单词的每个其他字母。你正在遍历包括原版在内的每一封信。外部for循环应略有不同。
答案 1 :(得分:0)
还有另一种选择,但我不确定它是否更容易实现(至少对我来说听起来更容易)。您可以构建一个简单的查询机制,而不是循环遍历每个字符并将其插入到单词中:
Input: b?ob
所以你的算法会是这样的:
1) Start with your entire word list
2) Remove all words that don't start with b
3) You can "ignore" the ?
4) Remove all words that don't have a 'o' in the 3rd position
5) Remove all words that don't have a 'b' in the 4th position
6) Return the results
然后,您将浏览每个选项
Input 2: bo?b
Input 3: bob?
答案 2 :(得分:0)
我所做的是添加一些代码,这些代码构成一个ArrayList(基本上是一个无限的数组),然后用一个字母切换所有可能性填充它。它还打印出每个,但你可以删除它。
我所做的唯一改变是:
1.添加ArrayList
2.修复你的外环;它是一个字符短(Bob需要4次迭代,而不是3次)
3.添加其他子字符串段以说明其余部分。
可以通过words.get(a)检索元素;其中'a'是Array-list范围内的int。不要忘记import语句,import java.util。*;
这也比Jeff的解决方案更有效率,因为它不必检查整个字典,然后从字典中删除每个元素,如下所示,它只需要检查所有~100的字典可能性。由于字典按字母顺序排列,因此可以非常快速地进行搜索,但删除每个条目(将近10万字)的效率会降低。
import java.util.*;
public class spellcheck {
public static void main(String[] args) {
String word = "evelina";
char[] wordCharArr = word.toCharArray();
ArrayList<String> words = new ArrayList<String>();
for(int i=0; i <= wordCharArr.length ; i++) {
for(char j = 'A'; j <= 'Z' ; j++) {
words.add(word.substring(0,i) + j + word.substring(i,wordCharArr.length));
System.out.println(word.substring(0,i) + j + word.substring(i,wordCharArr.length));
}
}
}
}