Der Titel sagt so ziemlich alles. Was ist die einfachste / eleganteste Art, wie ich in Java eine Zeichenfolge vom Format "THIS_IS_AN_EXAMPLE_STRING"
in das Format " ThisIsAnExampleString
" konvertieren kann ? Ich denke, es muss mindestens einen Weg geben, dies zu tunString.replaceAll()
einem regulären Ausdruck .
Meine ersten Gedanken sind: Stellen Sie der Zeichenfolge einen Unterstrich ( _
) voran, konvertieren Sie die gesamte Zeichenfolge in Kleinbuchstaben und konvertieren Sie dann mit replaceAll jedes Zeichen, dem ein Unterstrich mit seiner Großbuchstabenversion vorangestellt ist.
Antworten:
Eine weitere Option ist die Verwendung von Google Guava
com.google.common.base.CaseFormat
George Hawkins hat einen Kommentar zu diesem Anwendungsbeispiel hinterlassen:
quelle
Schauen Sie sich WordUtils in der Apache Commons lang- Bibliothek an:
Insbesondere sollte die Methode capitalizeFully (String str, char [] delimiters) die folgende Aufgabe ausführen:
Grüner Balken!
quelle
Hinweis : Sie müssen die Argumentvalidierung hinzufügen.
quelle
String result = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "THIS_IS_AN_EXAMPLE_STRING");
. Siehe com.google.common.base.CaseFormat javadoc .Mit Apache Commons Lang3 lib ist das sehr einfach.
Beispiel:
Gibt:
quelle
quelle
Hier ist ein Code-Snippet, das helfen könnte:
quelle
Java 1.8-Beispiel mit Streams
THIS_IS_SOME_TEXT ist jetzt thisIsSomeText
quelle
text.matches( "([a-z]+[a-zA-Z0-9]+)+" )
vor der Kamelhülle ist wahrscheinlich eine vernünftige Problemumgehung für das Problem der unteren Hülle.Ich bin mir nicht sicher, aber ich denke, ich kann weniger Speicher verwenden und eine zuverlässige Leistung erzielen, indem ich es char-by-char mache. Ich habe etwas Ähnliches gemacht, aber in Schleifen in Hintergrund-Threads, also versuche ich das jetzt. Ich habe einige Erfahrungen damit gemacht, dass String.split teurer ist als erwartet. Und ich arbeite an Android und erwarte, dass GC-Schluckauf eher ein Problem als die Verwendung von CPUs ist.
Ein Hinweis darauf, dass String.split teuer ist, ist, dass seine Eingabe ein regulärer Ausdruck ist (kein Zeichen wie String.indexOf) und ein Array zurückgibt (anstelle eines Iterators, da die Schleife jeweils nur eine Sache verwendet). Plus-Fälle wie "AB_AB_AB_AB_AB_AB ..." beeinträchtigen die Effizienz von Massenkopien und verwenden für lange Zeichenfolgen eine Größenordnung mehr Speicher als die Eingabezeichenfolge.
Während das Durchlaufen von Zeichen keinen kanonischen Fall hat. Daher scheint mir der Overhead eines nicht benötigten regulären Ausdrucks und Arrays im Allgemeinen weniger vorzuziehen zu sein (und dann die mögliche Effizienz von Massenkopien aufzugeben). Interessiert, Meinungen / Korrekturen zu hören, danke.
quelle
Zeiten: in Millisekunden.
quelle
Sie können org.modeshape.common.text.Inflector verwenden .
Speziell:
Maven-Artefakt ist: org.modeshape: modeshape-common: 2.3.0.Final
im JBoss-Repository: https://repository.jboss.org/nexus/content/repositories/releases
Hier ist die JAR-Datei: https://repository.jboss.org/nexus/content/repositories/releases/org/modeshape/modeshape-common/2.3.0.Final/modeshape-common-2.3.0.Final.jar
quelle
Sie können dies auch versuchen:
quelle
quelle
Dies ist das einfachste Programm, das in CamelCase konvertiert werden kann. hoffe es wird dir helfen ..
quelle
Es wird
Enum Constant
in Camel Case umgewandelt. Es wäre hilfreich für alle, die nach einer solchen Funktionalität suchen.quelle
Eine weitere Lösung hierfür kann wie folgt sein.
quelle
Aufruf als
Ausführungszeit: 14 ms
quelle
Ein einfaches Snnipet:
quelle
Java 8 für mehrere Zeichenfolgen:
quelle
quelle
CaseFormat
ist keine Standard-API. Doppelte Antwort, wenn es Guave ist.