突出显示所有匹配词 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 中突出显示文本中出现的搜索词?