突出显示所有出现的字符串

时间:2016-06-28 13:05:07

标签: java

我制作了一个小记事本程序,因为我很无聊,并认为我会尝试实现一个" Find"我的程序中的功能。

我想突出显示与给定字符串匹配的每个单词。

这是主要的代码块

if(e.getSource() == m_find){
    String s = (String)JOptionPane.showInputDialog("Find Word", "Please search a word");
       if(m_area.getText().contains(s)){
         int start = m_area.getText().indexOf(s);
         int length = start + s.length();
           try {
               highlight.addHighlight(start, length, painter);
           } catch (BadLocationException e1) {
               e1.printStackTrace();
           }
    }

这只是第一次出现这个单词,我怎么能够高举每一个单词。

3 个答案:

答案 0 :(得分:0)

我确信有很多方法,但如果有更多要找的话,可以使用while循环来突出显示事件。然后你只会继续看着已经突出显示的字符串。

String stringToFindWordsIn = m_area.getText();

while(stringToFindWordsIn.contains(s)){
    // highlight the word

    // Make stringToFindWordsIn the substring from where you just highlighted to the end (drop off everything before and including the word you just highlighted)
}

答案 1 :(得分:0)

您可以使用带有start参数的indexOf来开始搜索给定索引的表单,示例实现:

int start = 0;
do {
    start = m_area.getText().indexOf(s, start);
    int length = start + s.length();
    try {
        highlight.addHighlight(start, length, painter);
    } catch (BadLocationException e1) {
        e1.printStackTrace();
    }
    start += length;
}

答案 2 :(得分:0)

试试这个:

if(e.getSource() == m_find){
        String s = (String)JOptionPane.showInputDialog("Find Word", "Please search a word");
       if(m_area.getText().contains(s)){
         String text = m_area.getText();
         int start = text.indexOf(s);
         while (start >= 0) {
           int length = start + s.length();
           try {
               highlight.addHighlight(start, length, painter);
           } catch (BadLocationException e1) {
               e1.printStackTrace();
           }
           start = text.indexOf(s, start + 1);
        }
    }