Название в значительной степени говорит обо всем. Какой самый простой / самый элегантный способ, которым я могу преобразовать в Java строку из формата "THIS_IS_AN_EXAMPLE_STRING"
в формат " ThisIsAnExampleString
"? Я полагаю, что должен быть хотя бы один способ сделать это с String.replaceAll()
помощью регулярного выражения.
Мои первоначальные мысли таковы: добавьте строку с подчеркиванием ( _
), преобразуйте всю строку в нижний регистр, а затем используйте replaceAll, чтобы преобразовать каждый символ, которому предшествует подчеркивание, с его заглавной версией.
Ответы:
Другой вариант использует Google Guava's
com.google.common.base.CaseFormat
Джордж Хокинс оставил комментарий с этим примером использования:
источник
Взгляните на WordUtils в библиотеке языка Apache Commons :
В частности, метод capitalizeFully (String str, char [] delimiters) должен выполнить эту работу:
Зеленая полоса!
источник
Примечание . Вам необходимо добавить проверку аргументов.
источник
String result = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "THIS_IS_AN_EXAMPLE_STRING");
. Смотрите com.google.common.base.CaseFormat javadoc .С Apache Commons Lang3 lib это очень просто.
Пример:
дает:
источник
источник
Вот фрагмент кода, который может помочь:
источник
Пример Java 1.8 с использованием потоков
THIS_IS_SOME_TEXT теперь thisSsSomeText
источник
text.matches( "([a-z]+[a-zA-Z0-9]+)+" )
перед верблюжьей оболочкой, вероятно, является разумным обходным решением для проблемы с нижней частью корпуса.Не уверен, но я думаю, что смогу использовать меньше памяти и получить надежную производительность, выполняя ее по принципу char-by-char. Я делал что-то подобное, но в циклах в фоновых потоках, поэтому я пытаюсь это сейчас. У меня был некоторый опыт работы с String.split, который оказался дороже, чем ожидалось. И я работаю над Android и ожидаю, что сбой GC станет более серьезной проблемой, чем использование процессора.
Намек на то, что String.split является дорогостоящим, заключается в том, что его входные данные являются регулярным выражением (а не символом типа String.indexOf) и возвращают массив (вместо, скажем, итератора, поскольку цикл использует только одну вещь за раз). Плюс такие случаи, как "AB_AB_AB_AB_AB_AB ...", снижают эффективность любой объемной копии, а для длинных строк используют на порядок больше памяти, чем входная строка.
Принимая во внимание, что цикл через символы не имеет никакого канонического случая. Поэтому мне кажется, что издержки ненужных регулярных выражений и массивов, как правило, менее предпочтительны (чем отказ от возможной эффективности массового копирования). Заинтересованы услышать мнения / исправления, спасибо.
источник
Время: в миллисекундах.
источник
Вы можете использовать org.modeshape.common.text.Inflector .
В частности:
Артефакт Maven: org.modeshape: commonhape-common: 2.3.0.Final
в репозитории JBoss: https://repository.jboss.org/nexus/content/repositories/releases
Вот файл JAR: https://repository.jboss.org/nexus/content/repositories/releases/org/modeshape/modeshape-common/2.3.0.Final/modeshape-common-2.3.0.Final.jar
источник
Вы можете попробовать это также:
источник
источник
Это самая простая программа для преобразования в CamelCase. надеюсь, это поможет вам ..
источник
Он превратится
Enum Constant
в чехол для верблюдов. Это было бы полезно для тех, кто ищет такую функциональность.источник
Еще одно решение этого может быть следующим.
источник
Вызов как
Время выполнения: 14 мс
источник
Простой сннипет:
источник
Java 8 для нескольких строк:
источник
источник
CaseFormat
не является стандартным API. Дублируйте ответ, если это Гуава.