String in String?

Maik20

Erfahrenes Mitglied
Hallo,

ich habe folgenden String s="abc # def # ad#f" und möchte gerne wissen wie häufig der String b = " # " in diesem vorkommt. (Ergebnis: 2 x).

Gibt es hier eine Funktion?
 
Moin,

ich würde es über RegEx versuchen!
Also den String über den Suchterm (hier: " #" splitten) :

Java:
String strText = "abc # def # ad#f"
String[] strMainArray = null;
String strSplitPattern = " #";
Pattern p = Pattern.compile(strSplitPattern);
strMainArray = p.split( strText , 0 );

// Ergebnis ==>
// strMainArray[0] = 'abc'
// strMainArray[1] = ' def'
// strMainArray[2] = ' ad#f'

Die Länge von "strMainArray" minus 1 ergibt dann die Anzahl der Vorkommen ;)

Gruß
Klaus
 
Nein gibt es nicht,

du musst wohl über die Zeichen des Strings iterieren oder in einer Schleife indexOf aufrufen.

P.S.: vfl_freak Variante gibt es auch als string.split() Methode. Diese ist wie der Name schon sagt dazu da einen String aufzusplitten und nicht dafür Anzahl Zeichen zu zählen.
 
Zuletzt bearbeitet:
Naja über die Länge des Arrays zu gehen, welches man bei "split" erhält ist eine Möglichkeit. Man kann auch in einer Schleife jedes Zeichen durchgehen.
Aber mir ist auch keine Methode bekannt, die einem direkt die Anzahl der Vorkommen einer Charsequenz zurückgibt.
 
Moin,

hab's vorhin vlt. etwa unklar ausgedrückt - sorry!


Java:
String strText = "abc # def # ad#f"
String[] strMainArray = null;
String strSplitPattern = " #";
Pattern p = Pattern.compile(strSplitPattern);
strMainArray = p.split( strText , 0 );
 
// Ergebnis ==>
// strMainArray[0] = 'abc'
// strMainArray[1] = ' def'
// strMainArray[2] = ' ad#f'

int iAnz = strMainArray.length - 1;
// ==> ergo: iAnz == 2 in diesem Bsp.

Ist wohl einfacher, als den String zu scannen, oder ?
Gruß
Klaus
 
Ausnahmsweise schreib ich mal den Code direkt. Es kommt eine kleine Schwierigkeit hinzu wenn man statt nach einem char nach einem String suchen will.

Java:
int counter = 0;
char[] chars = string.toCharArray();
for(char c :chars){
if(c == '#'){
counter++;
}
}

Ich finde das wesentlich einfacher zu verstehen.
 
Moin,

ja ja, nur das eben nicht nach '#' sondern nach ' #' (mit führendem Blank) gesucht werden soll ! !
Deshalb ja auch nur 2 statt 3 Vorkommen ;-]

Gruß
Klaus
 
Es kommt eine kleine Schwierigkeit hinzu wenn man statt nach einem char nach einem String suchen will.

Beantortet wohl deine Aussage...

Auch mit der For-Schleife lässt sich nach " #" suchen, nur eben mit etwas Eigeninitiative.

Warum benutzt du denn überhaupt ein Patternobject?

Java:
String text = "abc # def # ad#f";

int anzahl = text.split(" #").length - 1;

Finde ich doch weitaus übersichtlicher und einfacher.
 
Moin,

stimmt, das geht auch!
Ist aber - vor allem wenn man hier nicht genau weiß, worum es geht - nicht so übersichtlich und selbsterklärend, oder

Ich bin immer stark für leserlichen Code ;-]

Gruß
Klaus
 
Naja viele Wege füren zum Ziel. Die Frage ist was einem dabei wichtig ist?^^

Java:
		String s = "abc # def # ad#f";
		String toSearch = " #";
		int i = 0;
		int counter = 0;
		int length = toSearch.length();
		while((i = s.indexOf(toSearch,i))>=0) {
			counter++;
			i += length;
		}
		System.out.print(counter);

Achja man kann natürlich mein anderes Beispiel dahingehend aufbohren, dass man immer 2 chars vergleicht
 
Zuletzt bearbeitet:
Zurück