Portal > Foren > Java > Allgemeine Java-Programmierung > Suche in einem String
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 08.12.2007, 16:53 Nach oben    #1
...möp...
 
Benutzerbild von Creativ
 
Registriert seit: 10.10.2005
Ort: Wolfsburg
Beiträge: 78
Standard Suche in einem String

Hi,
Bin gerade dabei wieder Java zu lernen. Habe jetzt aber gerade ein Problem wo ich nicht wirklich voran komme.

Ich wollte zum üben einen kleinen Texteditor machen. Bisher funktioniert auch alles, aber die Suche will noch nicht so ganz.

Ich habe die Suche mit der String-Funktion indexOf gemacht.

Der aufbau ist ca. so:

Code:
int i=0;
public void actionPerformed(ActionEvent evt) {
int searchStart = text.indexOf(searchText,i);
int searchEnd = searchStart + searchText.length();
if(searchStart == -1) {
                    msg.setText("Nichts gefunden");
                }else{
                    editor.select(searchStart,searchEnd);
                    if( searchStart == text.lastIndexOf(searchText) ) {
                        msg.setText("Keine weiteren Ergebnisse");
                    }else{
                        msg.setText("");
                            i++;
                    }
                }
}
Es wird also zuerst der erste Treffer selektiert, wenn man dann wieder auf "Suchen" klickt, wird der nächste Treffer selektiert usw.
Bei kurzen Texten hat das auch einwandfrei funktioniert, aber sobald der Text länger wird funktioniert das komischerweise nicht mehr.

Zum Beispiel selbst bei dem Text:
muh
lala
muh
lala
muh
lala

Wenn ich dabei nach "muh" suche, dann wird bei i=0 der erste eintrag selektiert, bei i=1 der zweite Eintrag.
Der dritte Eintrag wird dann aber erst bei i=10 selektiert.

Habt ihr eine Idee woran das liegen könnte?
Oder sollte man eine solche Suche lieber anders angehen?

Gruß,
Dennis
Creativ ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.12.2007, 23:43 Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.129
Standard

Also: indexOf funktioniert wie folgt:

Du hast einen String, übergibst den gesuchten String und den Index, an dem die Suche starten soll. Was du versuchst sieht so aus, als ob du die gefundene Instanz versuchen würdest.

Die Lösung deines Problems ist also, statt i++ folgendes zu verwenden:
Code:
i = searchEnd;
Dann funktioniert's wohl.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.12.2007, 02:09 Nach oben    #3
...möp...
 
Benutzerbild von Creativ
 
Registriert seit: 10.10.2005
Ort: Wolfsburg
Beiträge: 78
Standard

Ah...ok, Danke!

Funktioniert jetzt. Ich dachte man übergibt bei indexOf noch den wie vielten Treffer er anzeigen soll.
Jetzt funktionierts ja aber.
Creativ ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem bei Verarbeitung von Templates (Eigene Klassen) dago PHP-Programmierung 21 31.08.2006 16:02
Symbolklassen festlegen anna Allgemeine Java-Programmierung 2 12.11.2005 11:30
Datei einlesen. cyberdevil87 Allgemeine Java-Programmierung 3 27.06.2005 09:22
Access Anbindung unter Linux mit Java ? kampet Datenbanken 5 25.04.2005 08:43
string in teilbereiche zerteilen!? Niki_Tesla Allgemeine Java-Programmierung 10 14.02.2005 09:11


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45