Menge des Vorkommens eines Strings in einem Anderen

User123

Mitglied
Mit indexOf kann ich mir bekanntlich ja die Stelle des ersten Vorkommens eines Strings geben lassen, bzw. sehen, OB der String, nach dem ich suche, überhaupt vorhanden ist!
Aber wie kann ich herausfinden, WIE OFT ein String in einer zu durchsuchenden Zeichenkette vorhanden ist? Gibt es dafür keine einfache Methode (ich würde über Umwege wahrscheinlich auch zum Ziel kommen, aber dafür muss es doch eine spezielle Methode geben, die ich aber nirgends finden kann)?
 
Du kannst den String z.B mit einem RegEx Ausdruck durchsuchen.

Oder auch einfach nach dem gesuchten String splitten. Aus der Größe des zurückgegebenen Arrays kannst du dann auf die Anzahl schließen.
 
Zuletzt bearbeitet:
Oder auch einfach nach dem gesuchten String splitten. Aus der Größe des zurückgegebenen Arrays kannst du dann auf die Anzahl schließen.
Nein, das funktioniert nicht zuverlässig. Wenn du einen String
Code:
ASDASD
hast und nach
Code:
ASD
splittest hat das resultierende Array die Länge 0.

Und ob nen Regex für solch eine Aufgabe der richtige Weg ist, da gibt grad für Anfänger ne menge Stolpersteine.

Ich würde ganz simpel mit indexOf arbeiten. Im speziellen mit der Methode:
String (Java 2 Platform SE v1.4.2)
Hier kannst du als zweiten Parameter nen offset angeben. Das heißt du prüfst anfangs ob indexOf(deinString, 0) -1 liefert, wenn ja dann bist du fertig. Ansonsten holst du dir den Rückgabewert und prüfst solange weiter bis irgendwann -1 rauskommt. Die schleifendurchläufe kannst du dann zählen.
 
Zuletzt bearbeitet von einem Moderator:
Fuer meine kleine Anwendung würde der Trick von Final_Striker vorerst problemlos funktionieren. Werde aber auch mal die Methode von EikeB testen und ggf. diese dann einsetzen! Wenn sich noch Probleme auftuen, werde ich mich melden!
 
Fuer meine kleine Anwendung würde der Trick von Final_Striker vorerst problemlos funktionieren
Bis du eines Tages stundenlang vor deinem Programm sitzt und dich wunderst warum zur H*lle das nicht mehr richtig zählt :bae:

Und viel komplizierter ist der Weg über indexOf auch nicht:
Java:
public static int count(String haystack, String needle) {
	int resultCount = 0;
	int offset = -1;
	while ((offset = haystack.indexOf(needle, offset+1)) != -1) {
		resultCount++;
	}
	return resultCount;
}
Oder etwas kompakter:
Java:
public static int count(String haystack, String needle) {
	int resultCount = 0;
	for (int offset = haystack.indexOf(needle); offset != -1; offset = haystack.indexOf(needle, offset + 1), resultCount++)
		;
	return resultCount;
}
Wobei ich erstere Variante klar vorziehen würde 😉
 

Zurück
Oben