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



## Maxpower123 (17. Nov 2014)

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

```
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


----------



## Flown (17. Nov 2014)

Was darfst du verwenden und was nicht?

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


----------



## Maxpower123 (17. Nov 2014)

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

Ich hab das jetzt so gemacht

```
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.");

			}
		}
	}
```


----------



## Maxpower123 (17. Nov 2014)

Bis jetzt kann ich aber nur ein Zeichen im Text suchen, ich würde gerne ein ganzes Wort suchen können. Dazu bräuchte ich wohl Arrays, oder?


----------



## Flown (17. Nov 2014)

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


```
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
```


----------



## Maxpower123 (17. Nov 2014)

So funktionierts jetzt bei mir.

```
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 (17. Nov 2014)

Also deine "Lösung" funktioniert nicht!

Versuch es doch mal mit

```
String s1 = "This is a teststring";
String s2 = "is a";
```


----------



## Maxpower123 (17. Nov 2014)

Meinst du jetzt das Leerzeichen, oder wie? Wenn ja, ist mir das egal.


----------



## Flown (17. Nov 2014)

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!


----------



## Maxpower123 (17. Nov 2014)

Ich weiß nicht, ob wir noch über dieselbe Aufgabe reden, aber mein Programm macht das, was es tun soll.


----------



## Flown (17. Nov 2014)

Kannst du noch einmal spezifizieren was dein Programm können soll? Vl mit einem kleinen Beispiel?


----------



## njans (17. Nov 2014)

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.


----------

