173 Stimmen

Was ist der einfachste Weg, um einen Java-String von Großbuchstaben (Wörter durch Unterstriche getrennt) in CamelCase (ohne Worttrennzeichen) umzuwandeln?

Der Titel sagt im Grunde alles aus. Wie kann ich in Java auf einfachste / eleganteste Weise einen String im Format "THIS_IS_AN_EXAMPLE_STRING" in das Format "ThisIsAnExampleString" umwandeln? Ich denke, es muss mindestens eine Möglichkeit geben, dies mit String.replaceAll() und einem Regex zu tun.

Meine ersten Gedanken sind: Den String mit einem Unterstrich (_) versehen, den gesamten String in Kleinbuchstaben umwandeln und dann replaceAll verwenden, um jedes Zeichen, das von einem Unterstrich gefolgt wird, in seine Großschreibungsform umzuwandeln.

221voto

Arnout Engelen Punkte 6250

Eine andere Möglichkeit besteht darin, Google Guava's com.google.common.base.CaseFormat zu verwenden.

George Hawkins hat einen Kommentar mit diesem Beispiel zur Verwendung hinterlassen:

CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "THIS_IS_AN_EXAMPLE_STRING");

140voto

Dan Gravell Punkte 7387

Schauen Sie sich WordUtils in der Apache Commons Lang-Bibliothek an:

Insbesondere die Methode capitalizeFully(String str, char[] delimiters) sollte die Aufgabe erledigen:

String blah = "LORD_OF_THE_RINGS";
assertEquals("LordOfTheRings", WordUtils.capitalizeFully(blah, '_').replaceAll("_", ""));

Grüne Leiste!

93voto

C. Ross Punkte 29783
static String toCamelCase(String s){
   String[] parts = s.split("_");
   String camelCaseString = "";
   for (String part : parts){
      camelCaseString = camelCaseString + toProperCase(part);
   }
   return camelCaseString;
}

static String toProperCase(String s) {
    return s.substring(0, 1).toUpperCase() +
               s.substring(1).toLowerCase();
}

Hinweis: Sie müssen die Argumentüberprüfung hinzufügen.

23voto

librucha Punkte 597

Mit der Apache Commons Lang3-Bibliothek ist es sehr einfach.

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;

public String getName(String text) {
  return StringUtils.remove(WordUtils.capitalizeFully(text, '_'), "_");
}

Beispiel:

getName("SOME_CONSTANT");

Ergebnis:

"SomeConstant"

11voto

Alex B Punkte 24270

Hier ist ein Code-Snippet, das hilfreich sein könnte:

String input = "ABC_DEF";
StringBuilder sb = new StringBuilder();
for( String oneString : input.toLowerCase().split("_") )
{
    sb.append( oneString.substring(0,1).toUpperCase() );
    sb.append( oneString.substring(1) );
}

// sb enthält jetzt den gewünschten String

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X