Highlighting...Hilfe

Slartibartfas

Grünschnabel
HI!

Hab ein Programm zum Suchen (und . Ersetzen) von Wörtern und Buchstabensequenzen geschrieben, weiss aber nicht wie ich die gefundenen Wörter in JTextArea markieren soll.

1. suchen:
Das Programm übergibt Strings (mit StringTokenizer vom Text getrennt) an die Suchmethode -> die Suchmethode gibt einen int[] array mit Beginn- und Endwerten der gesuchten Sequenzen im String (oder null, wen keine Übereinstimmung)..

2. Ersetzen:
Das Programm übergibt Strings (mit StringTokenizer vom Text getrennt) an die Ersetzmethode -> diese gibt entweder null oder ein String mit dem ersetzten Wort oder der Buchstabensequenz.....

Nun sollen die Wörter im JTextArea markiert werden, ich konnte aber bisher keine Methode finden, die das macht..

Danke im Voraus für eure Hilfe...

hier paar Auzüge meines codes:
such-class
Code:
class Search{

    String key;
    String repl;
    int[] pos;
    int[] dummy;
    int counter;
    int startCompareAt;
    /** Creates a new instance of Search */
    public Search() {
    }

    public Search(String key){
       this.key = key;
       pos = null;
    }

    public Search(String key, String repl){
        this.key = key;
        this.repl = repl;
        pos = null;
    }

    public void enlargeArray(){
		int[] dummyArray = new int[counter*2];
		//System.out.println("länge des darrays " + dummyArray.length);
		if(counter > 1){
			for(int i = 0; i < pos.length; i++){
				dummyArray[i] = pos[i];
			}
		}
		pos = dummyArray;
	}



    public int[] compareWord(String word){
        StringBuffer wordCheck = new StringBuffer(word.toLowerCase());
        StringBuffer keyCheck = new StringBuffer(key.toLowerCase());


        for(int i = startCompareAt; i < wordCheck.length();i++){

            if(wordCheck.charAt(i)==keyCheck.charAt(0)){
                try{
                    String test = (word.substring(i, (i+key.length())));
                    if(test.equalsIgnoreCase(key)){
                        ++counter;
			//System.out.println("counter " + counter);
			//System.out.println("w " + word.length());

			enlargeArray();
			//System.out.println((word.substring(i, (i+key.length()))));
                        pos[counter*2-2] = i;
                        pos[counter*2-1] = (i+key.length()-1);
                        startCompareAt = i+key.length();
                        //System.out.println("st " + startCompareAt);
                        return compareWord(word);
                    }
                }
                catch(IndexOutOfBoundsException iobe){
                    dummy = pos;
                    pos = null;
                    counter = 0;
                    startCompareAt = 0;
                    return dummy;
                }

            }
        }
        dummy = pos;
	pos = null;
	counter = 0;
       	startCompareAt = 0;
        return dummy;
    }

    public String replacingWord(String word){

        if(word.length() == key.length() && compareWord(word) != null){
            return repl;
        }
        return null;
    }

    public String replacingSeq(String word){

        if((compareWord(word)) != null){
            StringBuffer wordBuf = new StringBuffer(word);
            for(int i = 0; i < dummy.length; i+=2){
            	wordBuf.replace(dummy[i], dummy[i+1]+1, repl);
            }
            return wordBuf.toString();
        }
        return null;
    }


}
und hier ein Teil der Methodode zum Ersetzen im TextEditor
Code:
StringTokenizer token = new StringTokenizer(pane.getText());
     StringBuffer textBuff = new StringBuffer(pane.getText());
     String key;
     String repl;
     Search search = new Search(key, repl);
     try{
        //while(token.hasMoreTokens()){
         repl = token.nextToken();
         repl = search.replacingWord(repl);
         textBuff.append(repl);
         textBuff.append(token.nextElement());
        //}
     }
     catch(NoSuchElementException nse){}
     doNewCommand();
     pane.setText(textBuff.toString());
 
>Nun sollen die Wörter im JTextArea markiert werden, ich konnte aber bisher keine Methode finden, die das macht..

Markiere doch die Wörter mit

public void select(int selectionStart, int selectionEnd)

Vermutlich ist es aber wieder nicht das, was Du suchst/meinst...
 
Snape hat gesagt.:
>Nun sollen die Wörter im JTextArea markiert werden, ich konnte aber bisher keine Methode finden, die das macht..

Markiere doch die Wörter mit

public void select(int selectionStart, int selectionEnd)

Vermutlich ist es aber wieder nicht das, was Du suchst/meinst...
nicht ganz.....das geht nur beim Suchen, nicht beim Ersetzen und es kann nur eine Sequenz markiert werden; es sollen aber alle matches markiert werden......trotzdem danke :)
 
wenn ich dich richtig verstehe. könntest du es durch die darstellung des textes als html-datei dein Problem lösen.
Bei JTextArea bin ich mir gerade nicht sicher, aber bei JEditorPane geht es auf jedenfall, das du in diesem ein html-datei darstellen kannst. Du müsstest also eine Funktion haben, die um jedes gefundene Wort ein Tag setzt, mit dem du das Wort/die Wörter markieren willst. dann ist es auch egal ob du es unterstreichen willst oder was auch immer....
 
hankenberge hat gesagt.:
wenn ich dich richtig verstehe. könntest du es durch die darstellung des textes als html-datei dein Problem lösen.
Bei JTextArea bin ich mir gerade nicht sicher, aber bei JEditorPane geht es auf jedenfall, das du in diesem ein html-datei darstellen kannst. Du müsstest also eine Funktion haben, die um jedes gefundene Wort ein Tag setzt, mit dem du das Wort/die Wörter markieren willst. dann ist es auch egal ob du es unterstreichen willst oder was auch immer....
Ich kann es leider nicht als HTML machen...
 
Slartibartfas hat gesagt.:
nicht ganz.....das geht nur beim Suchen, nicht beim Ersetzen und es kann nur eine Sequenz markiert werden; es sollen aber alle matches markiert werden......trotzdem danke :)

Ich habe es ja geahnt...
Schätze mehrere Markierungen geht nur über Änderung des Schriftschnitts für die betreffenden Bereiche - falls das bei eine JTextArea überhaupt geht.
 

Neue Beiträge

Zurück