Nicht sicher, aber ich denke, ich kann weniger Speicher verwenden und eine zuverlässige Leistung erzielen, indem ich es charakterweise mache. Ich habe etwas Ähnliches gemacht, aber in Schleifen in Hintergrundthreads, also versuche ich das jetzt. Ich habe die Erfahrung gemacht, dass String.split teurer als erwartet ist. Und ich arbeite an Android und erwarte, dass GC-Aussetzer eher ein Problem sind als die CPU-Nutzung.
public static String toCamelCase(String value) {
StringBuilder sb = new StringBuilder();
final char delimChar = '_';
boolean lower = false;
for (int charInd = 0; charInd < value.length(); ++charInd) {
final char valueChar = value.charAt(charInd);
if (valueChar == delimChar) {
lower = false;
} else if (lower) {
sb.append(Character.toLowerCase(valueChar));
} else {
sb.append(Character.toUpperCase(valueChar));
lower = true;
}
}
return sb.toString();
}
Ein Hinweis, dass String.split teuer ist, ist, dass der Eingabe ein Regex ist (nicht ein char wie bei String.indexOf) und es ein Array zurückgibt (anstatt eines Iterators, da die Schleife immer nur eine Sache gleichzeitig verwendet). Außerdem brechen Fälle wie "AB_AB_AB_AB_AB_AB..." die Effizienz jedes Massenkopien, und für lange Zeichenfolgen wird eine Größenordnung mehr Speicher als die Eingabezeichenfolge verwendet.
Das Durchlaufen von Zeichen hat keinen kanonischen Fall. Also erscheint mir der Overhead eines unnötigen Regex und Arrays im Allgemeinen weniger wünschenswert (als die Möglichkeit, die Effizienz der Massenkopie aufzugeben). Interessiert daran, Meinungen/Korrekturen zu hören, danke.