gemeinsames Vorkommen der charactere von 2 Strings als String zurückgeben

bradig

Aktives Mitglied
gemeinsames Vorkommen der charactere von 2 Strings als String zurückgeben.
Der String ,der zurückgegeben wird,darf nur ein Element einmal enthalten.

Bp: getCommonCharacters( "abc", "cabadac") ="abc"
Ich bekomme aber immer aaabcc.
Ich weiß auch ,warum ich so ein Ergebnis bekomme.
Ich weiß aber nicht,wie das ganze lösen kann,damit ich Elemente nur einmal in meiner Lösung zurückbekommen kann.

Java:
  public static String getCommonCharacters(final String a, final String b) {

        String d="";

        for(int i=0;i<a.length();i++){
            for(int j=0;j<b.length();j++){
                if(a.charAt(i)==b.charAt(j)){
                    d=d+a.charAt(i);

                }
            }
        }

        return d;
    }
}

Bitte um Hilfe
Herzlich

Bradig
 
Hallo bradig,

Das was du erreichen willst kannst du in einer Zeile umsetzten:
Schau dir mal die Funktion String.replace All an ( in Verbindung mit Pattern.quote um Sonderzeichen auszuschließen).

Edit PS: wenn du deinen Code nicht verändern willst, Kannst du natürlich auch prüfen ob es den Buchstaben in deiner Lösung schon gibt bevor du es hinzugefügst

Grüße
Robert
 
Zuletzt bearbeitet:
komme leider nicht auf die Lösung.
habe viele Sachen ausprobiert und es klappt immer nicht.
Hat irgendeiner eine Idee?

herzlich
bradig
 
so gerade gelöst.
ich wusste nicht ,dass charSequence auch ein String ist,deswegen habe ich die contains()-Methode immer weggelassen.
Danke trotzdem Robat.
die Lösung:
Java:
  public static String getCommonCharacters(final String a, final String b) {

        String d="";

        for(int i=0;i<a.length();i++){
            for(int j=0;j<b.length();j++){
                if(a.charAt(i)==b.charAt(j)){
                    if(!d.contains(a.charAt(i)+"")){

                        d=d+a.charAt(i);
                    }

                }
            }
        }

        return d;

    }

Herzlich

Bradig
 
Gibt auch noch weitere Vereinfachungen:
MitForEach:
Java:
public String getCommonCharacters(final String a, final String b) {
        String result = "";
      
        for(char c1 : a.toCharArray()) {
            for(char c2 : b.toCharArray()) {
                if(c1 == c2 && !result.contains(String.valueOf(c1))) {
                    result += c1;
                }
            }
        }
      
        return result;
    }

Java8 streams:
Java:
public String getCommonCharacters(final String a, final String b) {
        return a.chars()
                .distinct()
                .mapToObj(c -> String.valueOf((char)c))
                .filter(s -> b.contains(s))
                .collect(Collectors.joining());
    }
Zu Erklärung, hier wird von a ein IntStream erzeugt.
Dann werden mit distinct() alle doppelten rausgefeuert.
Mit mapToObj() wird aus den Chars ein String gemacht, damit man damit leichter weiter arbeiten kann.
filter() schaut ob der aktuelle Buchstabe (s) im String b vorhanden ist.
Zu guter Letzt werden mit collect() und dem joining() die gefilterten Buchstaben zu einem String zusammengefügt.
 

Neue Themen


Zurück
Oben