如何突出重复的单词?

时间:2016-06-04 02:21:14

标签: java

我有一个字符串的ArrayList,它显示在文本区域中,我试图在每次调用此方法时沿着一个单词移动荧光笔,但它会一直突出显示前一个单词,因为它是一个重复的单词,而不是下一个。这是我的代码:

ArrayList<String> words = new ArrayList<String>();
                words.add("Word1"); //Keeps highlighting this one twice 
                words.add("Word2");
                words.add("Word1"); //Instead of highlighting this one
                words.add("Word3");

                for(String other : words)
                {
                    textArea.setText(textArea.getText() + "\n" + other);
                }

                int wordNum = 0;

                String word = words.get(wordNum++);

                Highlighter highlighter = textArea.getHighlighter();
                HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.blue);
                int p0 = textArea.getText().indexOf(word);
                int p1 = p0 + word.length();

                try
                {
                    highlighter.removeAllHighlights();
                    highlighter.addHighlight(p0, p1, painter);
                } catch (BadLocationException ex)
                {
                    ex.printStackTrace();
                    return;
                }

2 个答案:

答案 0 :(得分:0)

由于您从 p0 突出显示为 p1 ,这意味着,从第一次出现 word 的第一个索引开始,您突出显示第一个这个词,不是第二个。为避免这种情况,请使用lastIndexOf()代替indexOf()。

int p0 = textArea.getText().lastIndexOf(word);
int p1 = p0 + word.length();

现在,您将获得重复单词的最后一次出现,而不是第一次出现。

答案 1 :(得分:0)

如果要突出显示JTextArea的每个单词,请尝试使用此方法

Highlighter highlighter = jtextArea.getHighlighter();
    DefaultHighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.blue);
int front=0;

public void highligtNextWord(JTextArea ta)throws Exception{
    String str=ta.getText().trim()+" ";
    int end=str.indexOf(" ",front);
    highlighter.removeAllHighlights();
    highlighter.addHighlight(front, end, painter);
    if(end>=str.length()-1)
        front=0;
    else
        front=end+1;
}