Te recomendamos que pruebes esta respuesta en un ambiente controlado antes de enviarlo a producción, saludos.
Solución:
Puede usar una expresión regular con anticipación positiva de ancho cero: encuentra letras mayúsculas pero no las incluye en el delimitador:
String s = "thisIsMyString";
String[] r = s.split("(?=\pUpper)");
Y(?=X)
partidos Y
seguido por X
pero no incluye X
en el partido. Entonces (?=\pUpper)
coincide con una secuencia vacía seguida de una letra mayúscula, y split
lo usa como delimitador.
Consulte javadoc para obtener más información sobre la sintaxis de expresiones regulares de Java.
EDITAR: Por cierto, no funciona con thisIsMyÜberString
. Para letras mayúsculas que no sean ASCII, necesita una clase de caracteres en mayúscula Unicode en lugar de una POSIX:
String[] r = s.split("(?=\pLu)");
String[] camelCaseWords = s.split("(?=[A-Z])");
Para cualquiera que se pregunte cómo es el Patrón cuando la Cadena a dividir podría comenzar con un carácter en mayúscula:
String s = "ThisIsMyString";
String[] r = s.split("(?<=.)(?=\pLu)");
System.out.println(Arrays.toString(r));
da: [This, Is, My, String]
Reseñas y valoraciones del artículo
Ten en cuenta mostrar esta división si te fue útil.