【发布时间】:2019-04-28 17:50:32
【问题描述】:
我有一个应该返回列表的函数。该函数应该在解析文件并识别拼写错误的单词时建议不同的单词。我必须返回一个列表。但是,当我这样做时,我最终会一遍又一遍地得到相同的词。我意识到将“建议”单词存储在 Set 中可以解决这个问题(这样我只存储任何给定建议的一个实例)。唯一的问题是我无法返回该 Set,因为返回类型是 List (同样我无法更改它)。有没有办法解决这个问题?
我将提供以下功能。
public static List<String> getSuggestions(String word){
List<String> letters = Arrays.asList("a", "b", "c", "d", "e", "f", "g",
"h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u",
"v", "w", "x", "y", "z");
Set<String> suggestions = new HashSet();
StringBuilder builder = new StringBuilder(word);
for(int i = 0; i <= builder.length(); i++){
for(String string: letters){
StringBuilder suggestion = new StringBuilder(builder.toString());
suggestion.insert(i, string);
if(dictionary.contains(suggestion.toString().toLowerCase())){
suggestions.add(suggestion.toString());
}
}
}
for(int i = 0; i <= builder.length()-2; i++){
for(String string: letters){
StringBuilder suggestion = new StringBuilder(builder.toString());
char one = suggestion.charAt(i + 1);
char two = suggestion.charAt(i);
suggestion.replace(i, i + 1, String.valueOf(one));
suggestion.replace(i+1, i + 2, String.valueOf(two));
if(dictionary.contains(suggestion.toString().toLowerCase())){
suggestions.add(suggestion.toString());
}
}
}
for(int i = 0; i <= builder.length(); i++){
for(String string: letters){
StringBuilder suggestion = new StringBuilder(builder.toString());
suggestion.replace(i, i + 1, "");
if(dictionary.contains(suggestion.toString().toLowerCase())){
suggestions.add(suggestion.toString());
}
}
}
return suggestions;
}
【问题讨论】:
-
一个简单的谷歌搜索
java convert set to list给了我大约一亿个结果 -
给了我大约一亿个结果 - 仅此而已吗?
-
我建议你在同一个双循环中做 3 件事,并避免在同一件事上循环 3 次;)