自动完成功能Java
问题描述:
我正在为禁用peaople的Displaykeyboard工作,我正在考虑添加自动字填充功能。 我找到了一个来自oracle的例子,可以在我需要的时候工作。它的另一个例子:TextAreaDemo。问题是我真的不明白搜索算法,问题是当我添加一些单词到arraylist搜索算法停止正常工作。自动完成功能Java
String prefix = content.substring(w + 1).toLowerCase();
int n = Collections.binarySearch(words, prefix);
if (n < 0 && -n <= words.size()) {
String match = words.get(-n - 1);
if (match.startsWith(prefix)) {
// A completion is found
String completion = match.substring(pos - w);
// We cannot modify Document from within notification,
// so we submit a task that does the change later
SwingUtilities.invokeLater(
new CompletionTask(completion, pos + 1));
}
} else {
// Nothing found
mode = Mode.INSERT;
}
有没有办法修改这个例子,以便它可以处理任何单词?
答
确保您不只是将该单词添加到列表的末尾,然后使用binarySearch()
。它的文档说以下
名单必须按照自然顺序 其元素使得 此调用之前进行升序排序(按排序(名单)方法)。
了解更多关于在这里:https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20T)
下面的链接,例如http://docs.oracle.com/javase/tutorial/uiswing/components/textarea.html – QFireball
'binarySearch'依靠排序输入,所以我猜你不会在添加单词后再次对列表进行排序? –
该列表将是静态的,所以这不是真的needet – QFireball