String output = input.replaceAll("(\\p{Ll})(\\p{Lu})","$1 $2");
Este regex busca una letra minúscula follwed por una letra mayúscula y las reemplaza con el primero, un espacio y el último (que los separa eficazmente con un espacio). Pone a cada uno de ellos en un grupo de captura ()
para poder reutilizar los valores en la cadena de reemplazo mediante referencias ($1
y $2
).
Para encontrar letras mayúsculas y minúsculas se utiliza \p{Ll}
y \p{Lu}
(en lugar de [a-z]
y [A-Z]
), ya que maneja todos los letras mayúsculas y minúsculas en el estándar Unicode y no sólo los que están en el rango ASCII (this nice explanation of Unicode in regexes se aplica principalmente a Java también).
envíos como un comentario en lugar de respuesta porque no sé la sintaxis Pero estoy seguro de que sería muy fácil escribir una expresión regular que buscaría una letra mayúscula (que no está al principio de la oración) y agregar un espacio antes. – DaveJohnston
¿Espera 'convert (" HELLO ") ==" H E L L O "'? – vz0
@ vz0: En realidad, mi cuerda tendrá una minúscula entre las mayúsculas. – Emil