Я хотел бы написать метод, который преобразует CamelCase в удобочитаемое имя.
Вот контрольный пример:
public void testSplitCamelCase() {
assertEquals("lowercase", splitCamelCase("lowercase"));
assertEquals("Class", splitCamelCase("Class"));
assertEquals("My Class", splitCamelCase("MyClass"));
assertEquals("HTML", splitCamelCase("HTML"));
assertEquals("PDF Loader", splitCamelCase("PDFLoader"));
assertEquals("A String", splitCamelCase("AString"));
assertEquals("Simple XML Parser", splitCamelCase("SimpleXMLParser"));
assertEquals("GL 11 Version", splitCamelCase("GL11Version"));
}
PDFLoader
статьPDF Loader
?Ответы:
Это работает с вашими тестами:
Вот тестовая подвеска:
Он использует регулярное выражение сопоставления нулевой длины с lookbehind и lookforward, чтобы найти место для вставки пробелов. В основном есть 3 образца, и я использую
String.format
их, чтобы сделать их более читабельными.Три модели:
UC позади меня, UC сопровождается LC передо мной
не UC позади меня, UC передо мной
Письмо позади меня, не письмо передо мной
Ссылки
Смежные вопросы
Использование сопоставления нулевой длины для разделения:
источник
%s
» «s заполнители дляString.format(String format, args...)
аргументов. Вы также можете позвонить по индексу:String.format("%$1s|%$2s|%$3s", ...
relaceAll
также, я хочу добавить разделение, если строка имеет ".
" в этом.Вы можете сделать это с помощью
org.apache.commons.lang.StringUtils
источник
Опрятное и более короткое решение:
источник
assert
вопросе, использование заглавных букв нежелательно.Если вам не нравятся «сложные» регулярные выражения и вас не беспокоит эффективность, то я использовал этот пример для достижения того же эффекта в три этапа.
Он проходит все тестовые случаи выше, в том числе с цифрами.
Как я уже сказал, это не так хорошо, как использовать одно регулярное выражение в некоторых других примерах здесь - но кто-то может найти его полезным.
источник
Вы можете использовать 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
источник
Следующее регулярное выражение может быть использовано для определения заглавных букв в словах:
Он соответствует каждой заглавной букве, то есть эфиру после не заглавной буквы или цифры или сопровождается строчной буквой и каждой цифрой после буквы.
Как вставить пробел перед ними выходит за рамки моих навыков Java =)
Отредактировано, чтобы включить регистр цифр и регистр PDF Loader.
источник
L
вPDFLoader
?|
как «или». Ну ... может быть, это ... я видел хуже = /Я думаю, что вам придется перебирать строку и обнаруживать изменения от строчных к прописным, от прописных до строчных, от буквенных к числовым, от цифр к буквенным. При каждом обнаруженном вами изменении вставьте пробел с одним исключением: при переходе с прописных на строчные буквы вы вставляете пробел на один символ раньше.
источник
Это работает в .NET ... оптимизировать по своему вкусу. Я добавил комментарии, чтобы вы могли понять, что делает каждый кусок. (RegEx может быть трудно понять)
источник
Для справки, вот почти (*) совместимая версия Scala:
После компиляции его можно использовать непосредственно из Java, если соответствующий scala-library.jar находится в пути к классам.
(*) происходит сбой для входа,
"GL11Version"
для которого он возвращается"G L11 Version"
.источник
Я взял Regex из полигенных смазок и превратил его в метод расширения объектов:
Это превращает все в удобочитаемое предложение. Это делает ToString на переданном объекте. Затем он использует Regex, заданный polygenelubricants для разделения строки. Тогда это ToLowers каждое слово за исключением первого слова и любых сокращений. Думал, что это может быть полезно для кого-то там.
источник
Я не ниндзя регулярных выражений, поэтому я перебрал бы строку, сохраняя индексы текущей позиции и предыдущей позиции. Если текущая позиция является заглавной буквой, я вставляю пробел после предыдущей позиции и увеличиваю каждый индекс.
источник
http://code.google.com/p/inflection-js/
Вы можете связать методы String.underscore (). Humanize (), чтобы взять строку CamelCase и преобразовать ее в удобочитаемую строку.
источник