我制作了一个小记事本程序,因为我很无聊,并认为我会尝试实现一个" 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();
}
}
这只是第一次出现这个单词,我怎么能够高举每一个单词。
答案 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);
}
}