Ich mache einen Texteditor, der eine Zeichenfolge in der ersten Zeile eines Texts findet und sie und seine Vorkommen im gesamten Text hervorhebt. Das Problem ist, dass es auch die Vorkommen in den Kommentarzeilen hervorhebt (mit "#" begonnen). Dies ist mein Code so weit:So vermeiden Sie die Texthervorhebung einer Zeichenfolge in einer Zeile, die mit einem bestimmten Symbol beginnt [java]
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class TextArea {
public static void main(String[] args) {
JFrame frame = new JFrame("textArea");
frame.setSize(500,500);
final JTextArea textArea = new JTextArea() ;
frame.add(textArea);
frame.setVisible(true);
textArea.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void changedUpdate(DocumentEvent e) {
try {
String keyWords = findKeyWord();
findOccurrences(keyWords);
} catch (BadLocationException ex) {
Logger.getLogger(TextArea.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void insertUpdate(DocumentEvent e) {
try {
String keyWords = findKeyWord();
findOccurrences(keyWords);
} catch (BadLocationException ex) {
Logger.getLogger(TextArea.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void removeUpdate(DocumentEvent e) {
try {
String keyWords = findKeyWord();
findOccurrences(keyWords);
} catch (BadLocationException ex) {
Logger.getLogger(TextArea.class.getName()).log(Level.SEVERE, null, ex);
}
}
public String findKeyWord() throws BadLocationException {
String keyWord = "";
for(String line : textArea.getText().split("\n")){
if (line.trim().length() > 0) {
if(!line.startsWith("#")){
int keywordEndPosition = line.indexOf("#");
keyWord = line.substring(0, keywordEndPosition == -1 ? line.length() : keywordEndPosition);
keyWord = keyWord.trim();
break;
}
}
}
return keyWord;
}
public void findOccurrences(String keyWords) throws BadLocationException {
Highlighter highlighter = textArea.getHighlighter();
DefaultHighlighter.DefaultHighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.CYAN);
String[] keyArray;
highlighter.removeAllHighlights();
keyArray = keyWords.split("[(,)]");
for (int i=0; i<keyArray.length; i++) {
keyArray[i] = keyArray[i].trim(); }
for (String keyWord : keyArray) {
if (keyWord.isEmpty())
return;
Pattern pattern = Pattern.compile(Pattern.quote(keyWord));
Matcher matcher = pattern.matcher(textArea.getText());
while(matcher.find()) {
highlighter.addHighlight(matcher.start(), matcher.end(), painter);
}
}
}
});
}
}
Wie kann ich diesen Code bearbeiten Hervorhebung der Vorkommen nach einem Symbol „#“ in einer Linie angeordnet zu vermeiden? Danke für Ihre Hilfe!
das funktioniert! Danke! – Pino