Le titre dit à peu près tout. Quelle est la manière la plus simple / la plus élégante de convertir, en Java, une chaîne du format "THIS_IS_AN_EXAMPLE_STRING"
au format " ThisIsAnExampleString
"? Je pense qu'il doit y avoir au moins une façon de le faire en utilisant String.replaceAll()
et une regex.
Mes premières pensées sont les suivantes: ajoutez un trait de soulignement à la chaîne _
, convertissez la chaîne entière en minuscules, puis utilisez replaceAll pour convertir chaque caractère précédé d'un trait de soulignement avec sa version en majuscule.
Réponses:
Une autre option consiste à utiliser Google Guava
com.google.common.base.CaseFormat
George Hawkins a laissé un commentaire avec cet exemple d'utilisation:
la source
Jetez un œil à WordUtils dans la bibliothèque de langues Apache Commons :
Plus précisément, la méthode capitalizeFully (String str, char [] delimiters) devrait faire le travail:
Barre verte!
la source
Remarque : vous devez ajouter une validation d'argument.
la source
String result = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "THIS_IS_AN_EXAMPLE_STRING");
. Voir com.google.common.base.CaseFormat javadoc .Avec Apache Commons Lang3 lib, c'est très simple.
Exemple:
Donne:
la source
la source
Voici un extrait de code qui pourrait vous aider:
la source
Exemple Java 1.8 utilisant Streams
THIS_IS_SOME_TEXT est maintenant thisIsSomeText
la source
text.matches( "([a-z]+[a-zA-Z0-9]+)+" )
avant le boîtier de chameau est probablement une solution de contournement raisonnable pour le problème du boîtier inférieur.Pas sûr, mais je pense que je peux utiliser moins de mémoire et obtenir des performances fiables en le faisant char-par-caractère. Je faisais quelque chose de similaire, mais en boucles dans les threads d'arrière-plan, donc j'essaye ceci pour l'instant. J'ai eu une certaine expérience avec String.split étant plus cher que prévu. Et je travaille sur Android et je m'attends à ce que le hoquet du GC soit plus un problème que l'utilisation du processeur.
Un indice que String.split est cher est que son entrée est une expression régulière (pas un caractère comme String.indexOf) et il renvoie un tableau (au lieu de dire un itérateur car la boucle n'utilise qu'une seule chose à la fois). De plus, des cas comme "AB_AB_AB_AB_AB_AB ..." cassent l'efficacité de toute copie en bloc, et pour les chaînes longues, utilisez un ordre de grandeur plus de mémoire que la chaîne d'entrée.
Alors que la boucle à travers les caractères n'a pas de cas canonique. Donc, pour moi, la surcharge d'un regex et d'un tableau inutiles me semble généralement moins préférable (abandonnant alors une éventuelle efficacité de copie en masse). Intéressé d'entendre des opinions / corrections, merci.
la source
Temps: en milli secondes.
la source
Vous pouvez utiliser org.modeshape.common.text.Inflector .
Plus précisément:
L'artefact Maven est: org.modeshape: modeshape-common: 2.3.0.Final
sur le référentiel JBoss: https://repository.jboss.org/nexus/content/repositories/releases
Voici le fichier JAR: https://repository.jboss.org/nexus/content/repositories/releases/org/modeshape/modeshape-common/2.3.0.Final/modeshape-common-2.3.0.Final.jar
la source
Vous pouvez également essayer ceci:
la source
la source
C'est le programme le plus simple à convertir en CamelCase. j'espère que cela vous aidera.
la source
Il se convertira
Enum Constant
en Camel Case. Ce serait utile pour tous ceux qui recherchent une telle fonctionnalité.la source
Une autre solution à cela peut être la suivante.
la source
Invocation comme
Temps d'exécution: 14 ms
la source
Un simple snnipet:
la source
Java 8 pour plusieurs chaînes:
la source
la source
CaseFormat
n'est pas une API standard. Réponse en double s'il s'agit de goyave.