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.
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...
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.
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