Java Strings mischen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

C#-Code:

        private static String zippStrings(String text1, String text2, bool append)
        {
            String result = "";

            if (append)
            {
                for (int i = 0; i < ((text1.Length < text2.Length) ? text2.Length : text1.Length); i++)
                {
                    result += (i >= text1.Length) ? "" : text1[i].ToString();
                    result += (i >= text2.Length) ? "" : text2[i].ToString();
                }
            }
            else
            {
                for (int i = 0; i < ((text1.Length < text2.Length) ? text2.Length : text1.Length); i++)
                {
                    result += (i >= text1.Length) ? text1[i % text1.Length] : text1[i];
                    result += (i >= text2.Length) ? text2[i % text2.Length] : text2[i];
                }
            }

            return result;
        }

Um die Schleife aber nicht zweimal unnötigerweise zu schreiben würde ich es lieber so lösen:

        private static String zippStrings(String text1, String text2, bool append)
        {
            String result = "";

            for (int i = 0; i < ((text1.Length < text2.Length) ? text2.Length : text1.Length); i++)
            {
                result += (i >= text1.Length) ? (append ? "" : text1[i % text1.Length].ToString()) : text1[i].ToString();
                result += (i >= text2.Length) ? (append ? "" : text2[i % text2.Length].ToString()) : text2[i].ToString();
            }


            return result;
        }

MFG xGlumi

Woher ich das weiß:eigene Erfahrung – Programmier/IT Erfahrung seit 2009 (Freizeit und Beruf)

Der StringCharacterIterator erlaubt es dir, Zeichen für Zeichen durch eine Zeichenkette zu gehen, ohne dir Gedanken über den Index machen zu müssen. Mit dem StringBuilder kannst du dann deine Zeichenkette effizient bauen.

Einige Zeilen als Pseudo-Code:

int length;
if(append){
        length = text1.length() + text2.length();
}
else{
    //... Länge der resultierenden Zeichenkette ohne append
}

StringBuilder result = new StringBuilder(length); // StringBuilder(int capacity)

StringBuilder ist besser als das Konkatenieren von Strings ("+", "+="), weil Strings in Java unveränderlich sind, siehe String. In anderen Worten, wenn du an eine Zeichenkette in Java ein Zeichen hinzufügst, dann baut dir Java im Hintergrund eine komplett neue Zeichenkette und das jedes Mal. Der StringBuilder löst das, indem er Platz reserviert und dann an der geeigneten Stelle einfügt.

StringCharacterIterator iterator1 = new StringCharacterIterator(text1);
StringCharacterIterator iterator2 = new StringCharacterIterator(text2);

while(iterator1.next()){
    //...
}

Das tolle an Iteratoren ist es, dass du dir keinen Index merken musst, so wie du das mit der for-Schleife machst. Du bekommst aus dem Iterator immer das aktuelle Zeichen, mit "current()" und kannst einen Scrhitt weiter machen, in der Zeichenkette, mit "next()".

Wenn du diese beiden Klassen StringCharacterIterator und StringBuilder noch nicht kanntest, empfehle ich dir, da mal reinzuschauen, weil das deinen Code sehr viel effizienter und verständlich macht und du dir über weniger Dinge Gedanken machen musst.