2011-05-06 151 views
2

我正在用java编写一个自定义的find and replace。我浏览一个文本文件并在textarea中加载内容。现在我有一个文本框,在那里输入需要搜索的文本。在textarea中搜索单词

什么是搜索文本的最佳方式。我知道使用string.indexOf()的方法,但我也需要突出显示。所以请帮助我。

回答

4

首先阅读Text and New Lines了解如何获取要搜索的文本的信息。

然后为了突出显示文本,你会发现你需要使用荧光笔。代码是这样的:

Highlighter.HighlightPainter painter = 
    new DefaultHighlighter.DefaultHighlightPainter(Color.cyan); 

int offset = text.indexOf(searchWord); 
int length = searchWord.length(); 

while (offset != -1) 
{ 
    try 
    { 
     textPane.getHighlighter().addHighlight(offset, offset + length, painter); 
     offset = text.indexOf(searchWord, offset+1); 
    } 
    catch(BadLocationException ble) { System.out.println(ble); } 
} 
+0

Camicker,如何删除以前的亮点 – mrN 2011-05-11 08:18:29

+0

@mrN,您是否阅读过荧光笔API? – camickr 2011-05-11 19:15:50

+0

是的,我做到了。 – mrN 2011-05-12 06:42:50

0

indexOf是最简单的方法,但可能不是最快的方法。

为什么indexOf不适合你?您将获得匹配的索引,并且知道匹配的长度,因此只需突出显示匹配的文本。

+0

我不知道如何突出?能给我看看么? – mrN 2011-05-06 10:36:58

+0

http://www.exampledepot.com/egs/javax.swing.text/style_HiliteWords.html – krookedking 2011-05-06 12:03:34

0

我有我的文本编辑器相同的问题。我没有用荧光笔虽然,我用

textArea.select(int i1, int i2); //where i1 is where your selection begins and i2 is where it ends. 

也是一种简单的方法来查找和替换是:

textArea.setText(textArea.getText().replaceAll(String string1, String string2)); 
0
final String inputValue = JOptionPane.showInputDialog("Find What?"); 
final int l1 = jTextArea1.getText().indexOf(inputValue); 
final int l2 = inputValue.length(); 

if (l1 == -1) { 
    JOptionPane.showMessageDialog(null, "Search Value Not Found"); 
} else { 
    jTextArea1.select(l1, l2+l1); 
}