# String in String-Array suchen



## Kabauter (13. Nov 2016)

Guten Abend,
ich soll einen String in einem String-Array suchen. Es sollen mehrere Wörter eingegeben und diese in dem Feld gespeichert werden. Anschließend wird ein weiteres Wort eingegeben und es soll gezählt werden, wie oft dieses Wort vorkommt. Dabei dürfen keine String-Methoden benutzt werden. 
Das Zählen habe ich noch nicht implementiert, da anscheinend die eingegebenen Strings nicht richtig verglichen/übergeben werden. Dies sollte eigentlich über die methode inhalt geschehen. Im Moment wird also false ausgegeben, obwohl es eigentlich true sein sollte.
Hat jemand eine Idee, woran das liegt? MfG

```
public static void main(String[] args) {

        Scanner s = new Scanner(System.in);
       
        String [] wortliste = new String [5];
       
        for (int i=0;i<wortliste.length;i++) {
            System.out.print("Bitte das " + i + ". Wort eingeben: ");
            wortliste[i]=s.nextLine();
        }
       
        System.out.println("Bitte das gesuchte Wort eingeben: ");
        String gesuchtesWort = s.nextLine();
       
       
        System.out.println(inhalt(wortliste, gesuchtesWort));
       
        s.close();
    }
   
    public static boolean inhalt(String [] wortliste, String gesuchtesWort) {
        for (String i: wortliste) {
            if (gesuchtesWort == i) {
                return true;
            }
        }
        return false;
    }
```


----------



## Tarrew (13. Nov 2016)

String vergleicht man mit string1.equals(string2) und nicht mit == (damit wird nur die Referenz des Objekts verglichen).


----------



## Kabauter (13. Nov 2016)

Ich darf aber leider keine String-Methoden zum vergleichen benutzen. Wie ist das sonst möglich?


----------



## Tarrew (13. Nov 2016)

Über jedes Zeichen der beiden Strings laufen und prüfen ob string1.charAt(position)==string2.charAt(position) für jede Position wahr ist.


----------



## Kabauter (13. Nov 2016)

Tarrew hat gesagt.:


> Über jedes Zeichen der beiden Strings laufen und prüfen ob string1.charAt(position)==string2.charAt(position) für jede Position wahr ist.


Ist charAt nicht auch eine Methode zum Vergleichen? Es dürfen keine String-Methoden zum Vergleichen und Zusammensetzen von Teil-Strings verwendet werden.


----------



## Tarrew (13. Nov 2016)

charAt extrahiert nur ein Zeichen aus dem String, dient also weder direkt zum Zusammensetzen noch zum Vergleichen. Der Vergleich passiert ja dann wieder mit ==.


----------



## Tarrew (13. Nov 2016)

Oder man macht es so:

```
public static boolean inhalt(String[] wortliste, String gesuchtesWort) {
    return Arrays.asList(wortliste).contains(gesuchtesWort);
}
```

Dann benutzt man auch keine Methode aus der String Klasse (zmdst. nicht direkt).


----------



## neoexpert (13. Nov 2016)

Man könnte zum beschleunigen des Vergleichs erstmal

```
if(s1.hashCode()!=s2.hashCode()){
//sicher ungleich
}
```
probieren. Für kleine Strings müsste es funktionieren. Hoffentlich werden die Hashwerte vorberechnet.


----------



## JStein52 (13. Nov 2016)

neoexpert hat gesagt.:


> *if*(s1.hashCode()!=s2.hashCode()){


Du kannst aber schon lesen .... er darf keine String-Methoden verwenden


----------



## neoexpert (13. Nov 2016)

> Ichdarf aber leider keine String-Methoden zum vergleichen benutzen.


hashCode ist ja nicht zum Vergleichen. Ist sogar ungeeignet um zu vergleichen.


----------



## Kabauter (13. Nov 2016)

Wie funktioniert das dann, wenn mehrere Wörter hintereinander stehen und eins rausgesucht werden soll?   Bin gerade am verzweifeln. Es sieht im Moment folgendermaßen aus.

```
int vorkommen = 0;
      
        for (int x = 0; x < gesuchtesWort.length(); x++) {
            for (int ziffer = 0; ziffer < wortliste.length; ziffer++) {
                if (wortliste[x].charAt(ziffer) == gesuchtesWort.charAt(x))
                    vorkommen++;
            }
        }
        return vorkommen;
```

wortliste ist die Liste aller Wörter (String-Array). gesuchtesWort ist eben das gesuchte Wort.
Ich bringe hier glaube ich gerade einige Dinge durcheinander.
Die ArrayList wäre sicherlich eine Alternative, aber ich weiß nicht ob dies so unbedingt erwünscht ist.


----------



## prise1993 (14. Nov 2016)

Also am sinnvollsten ist es mit s1.equals(s2); == funktioniert jedenfalls nicht richtig da bei Objekten Referenzen verglichen werden. Oder mit s1.charAt(index); wie schon gesagt wurde, die nächste Möglichkeit ist den Strings in char Arrays umzuwandeln und diese elementweise zu vergleichen. Ganz ohne String Methoden kommst du hier nicht weiter!


----------

