java - que - Insertar espacio después de mayúscula
primera letra de cada palabra en mayuscula c++ (5)
Pseudocódigo
String source = ...;
String result = "";
// FIXME: check for enf-of-source
for each letter in source {
while current letter not uppercase {
push the letter to result;
advance one letter;
}
if not the first letter {
push space to result;
}
push the letter to result;
}
Cómo convertir "HelloWorld"
en "Hello World"
. La división debe realizarse en base a las letras mayúsculas, pero debe excluir la primera letra.
PD : Soy consciente de usar String.split y luego combinarlo. Solo quería saber si hay una mejor manera.
Si no desea utilizar expresiones regulares, puede recorrer los caracteres de la cadena, agregarlos a un constructor de cadenas (y agregar un espacio al generador de cadenas si se encuentra con una letra mayúscula que no es la primera):
String s = "HelloWorld";
StringBuilder result = new StringBuilder();
for(int i=0 ; i<s.length() ; i++) {
char c = s.charAt(i);
if(i!=0&&Character.isUpperCase(c)) {
result.append('' '');
}
result.append(c);
}
Mejor es subjetivo. Esto toma algunas líneas más de código:
public static String deCamelCasealize(String camelCasedString) {
if (camelCasedString == null || camelCasedString.isEmpty())
return camelCasedString;
StringBuilder result = new StringBuilder();
result.append(camelCasedString.charAt(0));
for (int i = 1; i < camelCasedString.length(); i++) {
if (Character.isUpperCase(camelCasedString.charAt(i)))
result.append(" ");
result.append(camelCasedString.charAt(i));
}
return result.toString();
}
Oculte esta implementación fea en una clase de utilidad y utilícela como una API (se ve bien desde la perspectiva del usuario;))
String s = "HelloWorldNishant";
StringBuilder out = new StringBuilder(s);
Pattern p = Pattern.compile("[A-Z]");
Matcher m = p.matcher(s);
int extraFeed = 0;
while(m.find()){
if(m.start()!=0){
out = out.insert(m.start()+extraFeed, " ");
extraFeed++;
}
}
System.out.println(out);
huellas dactilares
Hola mundo nishant
String output = input.replaceAll("(//p{Ll})(//p{Lu})","$1 $2");
Esta expresión regular busca una letra minúscula seguida de una letra mayúscula y la reemplaza con la primera, un espacio y la última (separándolas efectivamente con un espacio). Pone a cada uno de ellos en un grupo de captura ()
para poder reutilizar los valores en la cadena de reemplazo a través de referencias anteriores ( $1
y $2
).
Para buscar letras mayúsculas y minúsculas usa /p{Ll}
y /p{Lu}
(en lugar de [az]
y [AZ]
), porque maneja todas las letras mayúsculas y minúsculas en el estándar de Unicode y no solo las en el rango ASCII ( esta buena explicación de Unicode en regexes se aplica principalmente a Java también).