Java 如何突出显示重复的单词?

Java 如何突出显示重复的单词?,java,Java,我有一个字符串的ArrayList,它显示在一个文本区域中,每次调用此方法时,我都会尝试将高亮显示沿一个单词移动,但它会一直高亮显示前一个单词,因为它是一个重复的单词,而不是下一个单词。这是我的密码: ArrayList<String> words = new ArrayList<String>(); words.add("Word1"); //Keeps highlighting this one twice

我有一个字符串的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;
                }
ArrayList words=new ArrayList();
词语。添加(“词语1”)//一直高亮显示这一个两次
词语。添加(“词语2”);
词语。添加(“词语1”)//而不是强调这一点
词语。添加(“词语3”);
for(字符串其他:单词)
{
textArea.setText(textArea.getText()+“\n”+其他);
}
int-wordNum=0;
String word=words.get(wordNum++);
Highlighter=textArea.getHighlighter();
HighlightPainter=新的DefaultHighlighter.DefaultHighlightPainter(Color.blue);
int p0=textArea.getText().indexOf(word);
int p1=p0+word.length();
尝试
{
高亮显示。删除所有高亮显示();
高亮显示。添加高亮显示(p0、p1、painter);
}捕获(BadLocationException ex)
{
例如printStackTrace();
返回;
}

因为您突出显示的是从p0p1,这意味着,从单词第一次出现的第一个索引开始,您突出显示的是第一个单词,而不是第二个单词。要避免这种情况,请使用
lastIndexOf()
而不是indexOf()


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

如果要突出显示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;
}
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;
}