自动完成功能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; 
} 

有没有办法修改这个例子,以便它可以处理任何单词?

+0

下面的链接,例如http://docs.oracle.com/javase/tutorial/uiswing/components/textarea.html – QFireball

+0

'binarySearch'依靠排序输入,所以我猜你不会在添加单词后再次对列表进行排序? –

+0

该列表将是静态的,所以这不是真的needet – QFireball

确保您不只是将该单词添加到列表的末尾,然后使用binarySearch()。它的文档说以下

名单必须按照自然顺序 其元素使得 此调用之前进行升序排序(按排序(名单)方法)。

了解更多关于在这里:​​https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20T)

+0

哦,真是这个问题。 binarySort能够用于很多单词吗? – QFireball

+0

绝对。越多的话就越需要找到一场比赛,但它应该足够快,为你正在使用它 – Headline