Вы можете использовать регулярное выражение с положительным прогнозом нулевой ширины - оно находит заглавные буквы, но не включает их в разделитель:
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})");