Text nach Zeichen durchsuchen und erste Position angeben (ohne indexOf-Methode)

Maxpower123

Mitglied
Hi,

wie kann ich ein Zeichen in einem Text suchen und die erste Position davon angeben? Ich darf nur die charAt- und die length-Methode verwenden.

Ich habe mal so angefangen
Java:
String s1 = "asdgs d fdsf sdfsd";
	String s2 = "d";

Wie kann ich jetzt ohne die contain-Methode herausfinden, ob s2 in s1 enthalten ist?

G
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Was darfst du verwenden und was nicht?

Wenn du genaues Matching haben willst, dann brauchst du zwei for-Schleifen!
 
Zuletzt bearbeitet:

Maxpower123

Mitglied
"Ich darf nur die charAt- und die length-Methode verwenden." - das darf ich verwenden.

Ich hab das jetzt so gemacht
Java:
public static void string() {

		System.out.println("Geben Sie einen Text ein, den Sie untersuchen möchten.");
		String s1 = scan.nextLine();
		System.out.println("Geben Sie ein Zeichen ein, dessen erste Position Sie wissen möchten.");
		String s2 = scan.nextLine();
		
		

		for (int i = 0; i < s1.length(); i++) {
			if (s1.charAt(i) == s2.charAt(0)) {
				System.out.println("Die Position des Zeichens "+s2+" lautet "+(i+1)+".");
				break;
			}
			if (i + 1 == s1.length()) {
				System.out.println("Das Zeichen kommt im Text nicht vor.");

			}
		}
	}
 

Flown

Administrator
Mitarbeiter
Nein zwei geschachtelte for-Schleifen, wie ich es schon im Vorgängerthread gesagt habe.

Code:
for i: 0 ... len(text):
  for j: 0 ... len(searchText):
    if text[i+j] != text[j]:
      continue outerloop
    end if
  end for
  return i
end for
return -1
 
Zuletzt bearbeitet:

Maxpower123

Mitglied
So funktionierts jetzt bei mir.
Java:
	System.out.println("Geben Sie einen Text ein, den Sie untersuchen möchten.");
		String s1 = scan.nextLine();
		System.out.println("Geben Sie ein Zeichen ein, dessen erste Position Sie wissen möchten.");
		String s2 = scan.nextLine();

		int k = 0;

		for (int i = 0; i < s1.length(); i++) {
			for (int j = 0; j < s2.length(); j++) {
				if (s1.charAt(i) == s2.charAt(j)) {
					System.out.println("Die Position des Zeichens "
							+ s2.charAt(j) + " lautet " + (i + 1) + ".");
					k++;
				}
			}
			if (k == s2.length()) {
				break;
			}
			if (i + 1 == s1.length()) {
				System.out.println("Das Zeichen kommt im Text nicht vor.");
			}

		}
	}
 

Flown

Administrator
Mitarbeiter
Also deine "Lösung" funktioniert nicht!

Versuch es doch mal mit
Java:
String s1 = "This is a teststring";
String s2 = "is a";
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Du willst wissen, ob ein Text in einem anderen Text enthalten ist, oder?

Wenn ja, dann möchtest du die erste Position ermitteln, wo der String gefunden wurde?

Wenn ja, dann gibt deine Lösung was falsches zurück.

Dein Programm gibt die erste Position bei Stelle 3 zurück, obwohl Stelle 5 richtig wäre!
 

njans

Top Contributor
Flown hat schon recht. k wird bei dir nie resettet und daher musst du nur oft genug einen Buchstaben gleich haben, damit ein Treffer vorliegt.

String s = "aaaaaaaaaa"
String pattern = "abc"

Bei dir wird das Programm sagen, dass pattern in s enthalten ist, weil es bei jedem neuen Buchstaben feststellt, dass a == a ist und dann geht k um einen nach oben.
 

Neue Themen


Oben