# gemeinsame charakter in 2 Strings ermitteln und als Zeichenkette  zurückgeben



## bradig (7. Apr 2016)

Moin,

Meine Aufgabe:
Ermittelt die Buchstaben, die in den beiden gegebenen Zeichenketten vorkommen und gibt diese Buchstaben als neue Zeichenkette zurück. Falls es keine gemeinsamen Buchstaben gibt (das schließt auch die Fälle ungültiger Parameterwerte ein), so wird eine leere Zeichenkette zurückgegeben.

meine Lösung:


```
public static String getCharacters(final String a, final String b) {
        String d="";

        for(int i=0;i<a.length();i++){
            char c1= a.charAt(i);
            for(int j=0;j<b.length();j++){
                char c2=b.charAt(j);
                if(c1==c2){
                    d=d+c1;
                }
                else{
                    d=d+"";
            }
            }
        }
        return d;              
    }
}
```

Beim Testen habe ich festgestellt,dass etwas im Code fehlt.
was genau weiß ich nicht.

Bitte um Hilfe.

Herzlich
Bradig


----------



## Flown (7. Apr 2016)

Was hast du beim Testen festgestellt? Was fehlt?
Was soll zum Beispiel hier zurückgegeben werden?:

```
s1 = "aab";
s2 = "aba";
System.out.println(getCharacters(s1, s2));
```


----------



## bradig (7. Apr 2016)

Beispiel:
 Zeichenkette a: "baac"
Zeichenkette b: "fdeabac"

es soll "abc" oder "acb" oder "bac" oder "bca" oder "cab" oder "cba" zurückgegeben werden


----------



## Joose (7. Apr 2016)

Naja entweder oder ... Java wird nicht aus Lust und Laune eines davon zurückgeben sondern genau das was programmiert wurde.
Das Problem bei deinem Code ist das du schon gefunde Buchstabe nochmal prüfst.

Bezogen auf das Beispiel von Flown:

```
s1 = "aab";
s2 = "aba";
System.out.println(getCharacters(s1, s2));
```
Die Ausgabe wäre (mit deinem Code) `aaaab`

Mit deinem Beispiel wäre die Ausgabe (mit deinem Code): `baaaac`

Wenn du einen Buchstaben schon in beiden Strings gefunden hast, musst du diese nicht nochmal vergleichen.


----------



## bradig (9. Apr 2016)

Ich Weiss es.
Aber ich habe Es nicht besser implementieren können.
Ich habe ein ähnliches Problem(mit bufferreader) hier gefunden,das aber keine Eindeutige Lösung hatte.
Anscheinend ist es nicht einfach ,diese Aufgabe zu lösen.

Herzlich

Bradig

Ps:
Ich würde mich sehr für jeden guten Lösungsansatz freuen.


----------



## Flown (9. Apr 2016)

Du möchtest einen Lösungsansatz? Dann nutz doch String#indexOf(char c)
Die Idee:
Iteriere über die einzelnen char in String a
- Überprüfe ob char in b enthalten ist (mit indexOf != -1)
- Überprüfe ob char in result enthalten ist (ebenfalls indexOf == -1)
- wenn true, dann füge es dem result hinzu (result += c)
Gib result zurück

Fertig ist der Algorithmus. Gibt effizientere, aber das war nicht die Frage.


----------

