String schneiden und Counter hochzählen

CR7

Mitglied
Hallo Leute,

mein folgendes Problem ist, dass ich ein String habe indem "abcdabacdefabdf" steht, woraus ich nur die "ab" haben soll. Der soll halt zählen wie oft ein "ab" in dem String steht.

Ich habe zwar bei Freund google schon nachgeguckt, aber ich habe noch keine richtige Hinweise bekommen.

Danke! 🙂
 
Wenn ich dich richtig verstanden habe, suchst du ein Methode, die zählt, wieoft "ab" in einem String vorkommt. Ich würd's so machen:
Java:
int count="abcdefabcdabcdabab".split("ab",0).length-1;

Erklärung: Du splittest den String immer dort wo "ab" vorkommt (wichtig ist, dass du noch 0 mitgibst, damit leere Strings am Ende nicht fehlen), danach hast du logischerweise n+1 Strings, also kam "ab" length-1 mal vor.
 
Wird ein "Schneiden" benötigt? Falls nicht, kannst du es mit einem einfachen regulären Ausdruck und einem Matcher wie folgt machen:

Java:
String string = "abcdabacdefabdf";
		Matcher matcher = Pattern.compile("ab").matcher(string);
		while (matcher.find()) {
			System.out.println("Found");
		}
 
Danke erstmal!

Also beide Vorschläge funktionieren, wobei ich die Kevin94 besser zu verstehen finde.

Ich habe noch nichts mit dem Matcher gearbeitet und deshalb, kann ich noch nicht die Variante nehmen.
 
Hallo CR7,

Du könntest als Variante dein Ziel auch folgendermassen erreichen

Java:
	public static void main(String[] args) {

		String str = "abcdabacdefabdf";
		int count = 0;

		for (int i = 0; i < str.length() - 1; i++) {

			if (str.substring(i, i + 2).equals("ab")) {
				count++;
			}
		}
		System.out.println(count);
	}

Schöne Grüsse
Proteus
 
Wenn ich dich richtig verstanden habe, suchst du ein Methode, die zählt, wieoft "ab" in einem String vorkommt. Ich würd's so machen:
Java:
int count="abcdefabcdabcdabab".split("ab",0).length-1;

Erklärung: Du splittest den String immer dort wo "ab" vorkommt (wichtig ist, dass du noch 0 mitgibst, damit leere Strings am Ende nicht fehlen), danach hast du logischerweise n+1 Strings, also kam "ab" length-1 mal vor.

Ist falsch. Du solltest dein eigenes Beispiel mal ausprobieren! Die Erklärung findest du in der API-Doku von split 😉
 
Wenn du schon meckerst sag wenigstens was falsche sein soll. Ich hab in der Doku nach gelesen, was glaubst du warum da eine 0 noch als Argument mit dabei ist.

[EDIT]Mist hast recht: müsste -1 sein, damit das von mir veschriebene Verhalten eintritt.[/EDIT]
 
Ob es richtig ist, ist eine andere Frage. Das hängt davon ab, was du unter "x mal enthalten" verstehst.

Angenommen wir suchen 'abab' im String 'cabababd'. Wie oft ist es da drin? Sprich: dürfen sich die Fundstellen überschneiden?
 
Ob es richtig ist, ist eine andere Frage. Das hängt davon ab, was du unter "x mal enthalten" verstehst.

gemäss seiner Frage, sollte der Code schon ausreichen.

Man könnte aber als Erweiterung auch sowas machen, dann kann man aussuchen, was man will

Java:
	public static void main(String[] args) {

		String sequence = "cabababd";
		String check = "abab";
		boolean ignoreCrossover = true;
		String crossNotActive;
		int count = 0;

		if (ignoreCrossover) {
			crossNotActive = "nicht ";
		} else {
			crossNotActive = " ";
		}

		if (check.length() > 0) {
			for (int i = 0; i < sequence.length() - check.length() + 1; i++) {

				if (sequence.substring(i, i + check.length()).equals(check)) {

					if (ignoreCrossover) {

						i = i + check.length() - 1;
						count++;

					} else {
						count++;
					}
				}
			}
		} else {

			System.out
					.println("Es muss ein zu prüfenden String eingegeben werden\nDas Programm wird beendet");
			System.exit(0);

		}
		System.out.println(check + " kommt " + count + " Mal in " + sequence
				+ " vor\nwenn Ueberschneidungen " + crossNotActive
				+ "zugelassen sind");
	}

Gruss
 

Zurück
Oben