jtextpane突出显示只突出显示第一个实例

时间:2015-12-09 13:47:20

标签: java swing for-loop

我试图在jtextpane中突出显示多个单词。但是,我只能突出显示找到的第一个实例。

String key = "are";
Highlighter h = test.outputPane.getHighlighter();
String text = test.outputPane.getText();
String arr[] = text.split("[\\p{Punct}\\s]+");
for (int i = 0; i < arr.length; i++) {
    String temp = arr[i];
    if (temp.equals(key)) {
        try {
            h.addHighlight(text.indexOf(temp), text.indexOf(temp) + temp.length(), DefaultHighlighter.DefaultPainter);
        } catch (BadLocationException ex) {
            Logger.getLogger(crawler.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

问题是text.indexOf(String)只有“在第一次出现的指定子字符串的字符串中返回索引。”。你可以使用text.indexOf(String, int),它也“从指定的索引开始。”

enter image description here

例如:

18667209918

答案 1 :(得分:0)

h.addHighlight(text.indexOf(temp), text.indexOf(temp) + temp.length(), DefaultHighlighter.DefaultPainter);将始终突出显示文本中第一次出现的temp。由于temp等于您的搜索键,因此它只会突出显示搜索键的第一次出现。

您需要改进迭代代码......