我正在用java编写一个自定义的find and replace
。我浏览一个文本文件并在textarea中加载内容。现在我有一个文本框,在那里输入需要搜索的文本。在textarea中搜索单词
什么是搜索文本的最佳方式。我知道使用string.indexOf()
的方法,但我也需要突出显示。所以请帮助我。
我正在用java编写一个自定义的find and replace
。我浏览一个文本文件并在textarea中加载内容。现在我有一个文本框,在那里输入需要搜索的文本。在textarea中搜索单词
什么是搜索文本的最佳方式。我知道使用string.indexOf()
的方法,但我也需要突出显示。所以请帮助我。
首先阅读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); }
}
indexOf是最简单的方法,但可能不是最快的方法。
为什么indexOf不适合你?您将获得匹配的索引,并且知道匹配的长度,因此只需突出显示匹配的文本。
我不知道如何突出?能给我看看么? – mrN 2011-05-06 10:36:58
http://www.exampledepot.com/egs/javax.swing.text/style_HiliteWords.html – krookedking 2011-05-06 12:03:34
我有我的文本编辑器相同的问题。我没有用荧光笔虽然,我用
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));
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);
}
Camicker,如何删除以前的亮点 – mrN 2011-05-11 08:18:29
@mrN,您是否阅读过荧光笔API? – camickr 2011-05-11 19:15:50
是的,我做到了。 – mrN 2011-05-12 06:42:50