突出显示所有匹配词 Java

Posted

技术标签:

【中文标题】突出显示所有匹配词 Java【英文标题】:HighLighting all match words Java 【发布时间】:2016-11-30 02:49:02 【问题描述】:

我有一个TextArea,其中包含一个文档。我实现了DocumentListener 以突出显示与TextField 匹配的单词。

此代码的作用是突出显示单个单词而不是所有匹配项。即:如果我尝试在TextArea 中搜索“move”一词,并且该词重复了 3 次,则此代码仅突出显示第一个而没有其余的,我需要突出显示所有匹配的词!

public void search() throws BadLocationException //This method makes all logic for highLigh from jtextField into Document(TextArea)
    
        highLighter.removeAllHighlights();
        String s = textField.getText();

        if(s.length() <= 0)
        
            labelMessage("Nothing to search for..");
            return; //go out from this "if statement!".
        

        String content = textArea.getText();
        int index = content.indexOf(s, 0); //"s" = the whole document, 0 = means that was found(match) or -1 if no match(no found is return -1)

        if(index >= 0) //match found
        
            int end = index + s.length();
            highLighter.addHighlight(index, end, highlighterPainter);
            textArea.setCaretPosition(end);
            textField.setBackground(entryBgColor);
            labelMessage("'" + s + "' found. Press ESC to end search");
        

    

    void labelMessage(String msm)
    
        statusLabel.setText(msm);
    

    @Override
    public void changedUpdate(DocumentEvent e)
    
        // TODO Auto-generated method stub

    

    @Override
    public void insertUpdate(DocumentEvent e)
    
        try
        
            search();
         catch (BadLocationException e1)
        
            // TODO Auto-generated catch block
            e1.printStackTrace();
        

【问题讨论】:

你搜索一次,你为什么期望它找到多个匹配项? 根据您的代码,它只会显示第一次出现,更多您需要通过匹配其他索引来获取其他索引 shekhargulati.com/2010/05/04/… 和 ***.com/questions/13326872/… @Idos 我需要找到多个匹配项,因为如果用户想找到“汉克”这个词,并且在文档中有 5 个汉克,我想给他其他匹配的可能性,而不仅仅是第一个.. @vickyexpert 确切地说,我需要其他索引,但我想自动生成它,而不必逐个索引引用索引,因为如果在 TextArea 中有 10 次相同的单词,我不能制作所有这些参考资料..有一种方法可以在不参考的情况下逐一制作吗? 【参考方案1】:

如果对你有帮助,试试下面的代码,

    String content = textArea.getText();

    while(content.lastIndexOf(s) >= 0)
    
        int index = content.lastIndexOf(s);
        int end = index + s.length;

        highLighter.addHighlight(index, end, highlighterPainter);
        textArea.setCaretPosition(end);
        textField.setBackground(entryBgColor);
        labelMessage("'" + s + "' found. Press ESC to end search");

        content = content.substring(0, index - 1);
    

【讨论】:

“i”变量是什么意思?在哪里声明? 它是索引,抱歉按索引更改它【参考方案2】:
final String s = textField.getText();

String content = textArea.getText();
boolean  b = content.contains(s);  
while (b) 
    int start = content.indexOf(stringToMatch);
    int end = start + s.length() -1;

    // Write your lighlighting code here

    if (content.length() >= end ) 
      content = content.substring(end, content.length()) ;
      b = content.contains(s);
     else 
      b = false;
    

这有帮助吗?

【讨论】:

以上是关于突出显示所有匹配词 Java的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 中突出显示文本中出现的搜索词?

突出显示所有搜索词

Elasticsearch 没有突出显示所有匹配项

Eclipse 不突出显示匹配的变量

创建Chrome扩展程序,以突出显示网站上特定的预定义字词。

突出显示搜索词