Java: разбить строку, когда найдена заглавная буква - PullRequest
43 голосов
/ 20 сентября 2010

Я думаю, что это простой вопрос, но я не могу найти простое решение (скажем, менее 10 строк кода:)

У меня есть String, например "thisIsMyString", и мне нужно преобразовать его в String[] {"this", "Is", "My", "String"}.

Обратите внимание, что первая буква не в верхнем регистре.

Ответы [ 6 ]

100 голосов
/ 20 сентября 2010

Вы можете использовать регулярное выражение с положительным прогнозом нулевой ширины - оно находит заглавные буквы, но не включает их в разделитель:

String s = "thisIsMyString";
String[] r = s.split("(?=\\p{Upper})");

Y(?=X) соответствует Y, за которым следует X,но не включает X в матч.Поэтому (?=\\p{Upper}) соответствует пустой последовательности, за которой следует заглавная буква, а split использует ее как разделитель.

См. javadoc для получения дополнительной информации о синтаксисе регулярных выражений Java.

РЕДАКТИРОВАТЬ: Кстати, это не работает с thisIsMyÜberString тоже.Для заглавных букв не ASCII вам нужен класс символов в верхнем регистре Unicode вместо POSIX:

String[] r = s.split("(?=\\p{Lu})");
17 голосов
/ 20 сентября 2010
String[] camelCaseWords = s.split("(?=[A-Z])");
11 голосов
/ 08 декабря 2014

Для тех, кто интересуется, каков образец, когда строка для разделения может начинаться с символа верхнего регистра:

String s = "ThisIsMyString";
String[] r = s.split("(?<=.)(?=\\p{Lu})");
System.out.println(Arrays.toString(r));

дает: [This, Is, My, String]

5 голосов
/ 20 сентября 2010

Поскольку String::split принимает регулярное выражение, вы можете использовать упреждающий просмотр:

String[] x = "thisIsMyString".split("(?=[A-Z])");
0 голосов
/ 25 марта 2015

Это регулярное выражение будет разделено на Caps, пропуская первое.Так что это должно работать для верблюжьего и правильного случая.

(?<=.)(?=(\\p{Upper}))

TestText = Test, Text
thisIsATest = this, Is, A, Test
0 голосов
/ 15 августа 2011

Попробуйте это;

static Pattern p = Pattern.compile("(?=\\p{Lu})");
String[] s1 = p.split("thisIsMyFirstString");
String[] s2 = p.split("thisIsMySecondString");

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...