Best Practice String aufbau - Char Array oder Anhängen

Dentho

Mitglied
Hallo,

welche dieser beiden Arten ist effektiver um einen String aufzubauen?

Variante 1:
Code:
    public static String umlauteErsetzen(String args){
        String newString2 = "";

        for (int i = 0; i < args.length(); ++i){
            switch(args.charAt(i)){
            case 'ä': newString2 += "ae"; break;
            case 'ö': newString2 += "oe"; break;
            case 'ü': newString2 += "ue"; break;
            case 'ß': newString2 += "ss"; break;
            default: newString2 += args.charAt(i);
            }
        }
        return newString2;
    }

Variante 2:
Code:
    public static String umlauteErsetzen(String args){
        //Anzahl der Umlaute
        int newIndex = 0;
        for (int i = 0; i < args.length(); ++i){
            if (args.charAt(i) == 'ä' || args.charAt(i) == 'ö' || args.charAt(i) == 'ü' || args.charAt(i) == 'ß')
                ++newIndex;
        }
       
        char[] newString = new char[args.length() + newIndex];
        newIndex = 0;
       
        //Aufbau des Strings mit ausgeschriebenen Umlauten
        for (int i = 0; i < args.length(); ++i){
            switch(args.charAt(i)){
            case 'ä': newString[newIndex] = 'a'; newString[newIndex + 1] = 'e'; ++newIndex ; break;
            case 'ö': newString[newIndex] = 'o'; newString[newIndex + 1] = 'e'; ++newIndex ; break;
            case 'ü': newString[newIndex] = 'u'; newString[newIndex + 1] = 'e'; ++newIndex ; break;
            case 'ß': newString[newIndex] = 's'; newString[newIndex + 1] = 's'; ++newIndex ; break;
            default: newString[newIndex] = args.charAt(i);
            }
            ++newIndex;
        }
        return new String(newString);
    }

Oder lieber ganz anders mit einem StringBuilder?
Variante 1 finde ich deutlich besser lesbar bin mir aber nicht sicher ob es effektiv ist da es fast zu einfach wirkt.
 
Das schlimmste was man machen kann, ist in Schleifen Strings oder Arrays immer wieder und wieder neu zu erzeugen. Nichts anderes passiert nämlich bei newString+=xyz;
Wie Klaus also schon sagte mit StringBuilder arbeiten.
Java:
StringBuilder sb = new StringBuilder();
// ...
sb.append(...);
sb.append(...);
sb.append(...);
// ...
String result = sb.toString(); // komplett fertiger String
 
Kann das sein, dass du einfach nur "ä" etc aus einem String in "ae" ändern willst?
Dann kannst du besser die replace-Methode benutzen, geht dann noch deutlich kürzer...

Gruß
Lukas
 
@KaffeeFan

Die Ursprungsaufgabe ist vielleicht die selbe, die Fragen aber sehr wohl unterschiedlich.
Hier wird nach einer effektiven Art um Strings aufzuabuen, im anderen Thread nach einer Möglichkeit wie man Buchstaben ersetzen kann ohne replace.
Daher sind 2 unterschiedliche Threads angebracht.
 
@Joose

Es war aber die Frage nach der Best Practice und die wurde im anderen Thread doch ebenfalls erfragt und beantwortet...

Edit: Na gut, vielleicht hast du Recht... Aber hätte er den anderen Thread vorher gesehen, wäre dieser bestimmt nicht zustande gekommen...
Schönen Feierabend😉
 

Zurück
Oben