Cómo convertir una cadena a mayúscula en Java

Home >> Programación >> Java



¿Quieres convertir una cadena de caracteres a mayúscula en Java? Te voy a plantear tres escenarios diferentes y te voy a explicar paso a paso cada uno de ellos. Espero que alguno sea lo que estás buscando 😉:

Cómo convertir todos los caracteres de una cadena a mayúsculas
Cómo convertir la primera letra de una cadena a mayúscula
Cómo convertir la primera letra de cada palabra de una cadena a mayúscula

Antes de empezar, ten en cuenta una cosa. Cuando convertimos caracteres a mayúscula, convertimos caracteres alfabéticos. Piensa esto: ¿Cuál es la mayúscula de «6» o de «@»? No existe mayúscula ni minúscula para caracteres numéricos o especiales, pero eso no supondrá un problema. Si la cadena que quieres convertir contiene caracteres de diferente tipo la conversión se hará sobre los alfabéticos (si es que hay alguno). El resto de caracteres no se verán alterados, al igual que los alfabéticos que ya estuviesen en mayúscula.

Dicho esto, vamos al lío.

Cómo convertir todos los caracteres de una cadena a mayúscula

Vamos a por el primer caso: Tenemos una cadena compuesta sólo por caracteres alfabéticos en mayúscula, por ejemplo esta:

rinoceronte

El objetivo es convertir todos los caracteres a mayúscula, es decir, conseguir esta otra cadena:

RINOCERONTE

La clase String tiene definido un método que nos será muy útil para conseguir nuestro objetivo, el método toUpperCase().

String cadena = "rinoceronte";
String resultado = cadena.toUpperCase();
        
System.out.println(resultado);

Su uso es muy sencillo. Simplemente tienes que llamarlo (línea 2) utilizando la cadena que quieres convertir a mayúscula (en el ejemplo el objeto cadena) y toUpperCase() te devolverá una nueva cadena con el cambio hecho. Recuerda que String es inmutable por lo que la cadena original quedará inalterada. Fíjate que en el ejemplo guardo el resultado en un nuevo objeto que he llamado resultado.

Vamos a hacer otra prueba con una cadena un poco más compleja, por ejemplo esta:

Pedro obtuvo un 5 en su examen de C#

Como puedes ver la cadena del ejemplo tiene caracteres alfabéticos, numéricos (el 5) y caracteres especiales (espacios y #). También tiene algún carácter alfabético que ya está en mayúscula, como la P del inicio o la C al final. ¿Qué ocurrirá si utilizamos toUpperCase() con esta cadena? Vamos a comprobarlo:

String cadena = "Pedro obtuvo un 5 en su examen de C#";
String resultado = cadena.toUpperCase();
        
System.out.println(resultado);

Si lo has ejecutado verás que el resultado es este:

PEDRO OBTUVO UN 5 EN SU EXAMEN DE C#

Hemos conseguido lo que buscábamos. Se han convertido a mayúscula todos los caracteres alfabéticos que no lo estaban ya y el resto no se han visto alterados.

El método toUpperCase() de String es la solución perfecta para convertir todos los caracteres de una cadena a mayúscula.

Cómo convertir la primera letra de una cadena a mayúscula

Vamos con el siguiente escenario, convertir sólo el primer carácter de una cadena a mayúscula. Esto es lo que se conoce como capitalizar una cadena.

Voy a usar como ejemplo la misma cadena del apartado anterior, pero voy a poner el primer carácter en minúscula para poder hacer el cambio:

pedro obtuvo un 5 en su examen de C#

Para este caso voy a utilizar también el método toUpperCase(), pero voy a necesitar algo más de ayuda porque toUpperCase() me cambiaría la cadena entera y yo quiero que solo cambie el primer carácter.

Voy a utilizar un método que poco tiene que ver con la conversión de mayúsculas y minúsculas, pero que me ayudará a aislar el primer carácter para trabajar con el. Se trata del método substring() de la clase String:

String cadena = "pedro obtuvo un 5 en su examen de C#";
String resultado = cadena.substring(0,1).toUpperCase()+cadena.substring(1);
        
System.out.println(resultado);

Como puedes ver en la línea 2 del ejemplo llamo a substring() antes de llamar a toUpperCase(): cadena.substring(0,1).toUpperCase().

El método substring() sirve para obtener subcadenas a partir de una cadena mayor. Si te fijas, le paso un 0 y un 1. El 0 es la posición inicial (índice) desde la que quiero que obtenga la subcadena y el 1 es la posición final excluida. Básicamente está devolviendo el primer carácter de la cadena, el que ocupa la posición 0.

Como substring() devuelve una cadena puedo llamar con dicha cadena a toUpperCase(), que devolverá el resultado de substring() en mayúscula.

Primer paso completado, ya tengo la primera letra en mayúscula, ¿Qué pasa con el resto de la cadena? Pues aquí es donde entra en juego otra vez substring(). Si te fijas en la línea 2 vuelvo a llamar a substring() después del operador + y le paso ahora un 1: cadena.substring(1). Con eso le indico que quiero toda la cadena desde la posición 1 hasta el final, es decir, el resto de la cadena.

Si cadena.substring(0,1).toUpperCase() me devuelve el primer carácter en mayúscula y cadena.substring(1) el resto de la cadena, basta con concatenar ambos resultados con el operador + para conseguir una única cadena capitalizada.

El resultado final será:

Pedro obtuvo un 5 en su examen de C#

Cómo convertir la primera letra de cada palabra de una cadena a mayúscula

Vamos a por el último escenario: Capitalizar todas las palabras de una cadena, es decir, convertir a mayúscula la primera letra de cada palabra que compone una cadena.

Voy a continuar con la cadena que usé de ejemplo en los apartados anteriores:

pedro obtuvo un 5 en su examen de C#

El resultado que busco sería este:

Pedro Obtuvo Un 5 En Su Examen De C#

¿Cómo lo hago? Para que sea más sencillo voy a dividir el problema en dos partes: Separar la cadena en palabras y capitalizar cada palabra.

Parte 1: Separar la cadena en palabras

Si lo piensas bien, cada palabra dentro de una cadena está separada del resto por, al menos, un espacio. Usando esa lógica podemos extraer una palabra cada vez que encontremos un espacio.

Suena complicado pero no lo es porque la clase String dispone de un método ya implementado que lo hace de forma automática. El método split().

String cadena = "pedro obtuvo un 5 en su examen de C#";
String [] palabras = cadena.split(" ");

Fíjate que le paso a split() como parámetro un espacio entre comillas: cadena.split(» «). Ese espacio determina el patrón que debe utilizar split() a la hora de realizar la división. Cada vez que encuentre un espacio cortará la cadena.

Una vez ejecutado, split() devuelve un array con varias cadenas. Cada una de estas cadenas es una de las palabras que se han obtenido tras realizar la división, es decir, cada una de las palabras que contenía la cadena original.

Tendremos algo como esto:

Parte 2: Convertir a mayúscula la primera letra de cada palabra

Una vez generado el array con todas las palabras ya solo queda poner en mayúscula la primera letra de cada una. Es aplicar el mismo procedimiento que vimos en el apartado anterior, pero con cada una de las palabras del array.

String resultado = "";
for (int i=0; i<palabras.length; i++){
    resultado += palabras[i].substring(0,1).toUpperCase() + palabras[i].substring(1);
    resultado += " ";
}
resultado = resultado.trim();

Como las palabras están almacenadas en un array tenemos que iterarlo utilizando un bucle, en el ejemplo estoy usando un for: for (int i=0; i<palabras.length; i++).

Cada palabra se encuentra en una posición del array. En la posición 0 se encuentra la cadena «pedro», en la posición 1 se encuentra «obtuvo» y así sucesivamente. El bucle for hace que la variable i tome cada uno de los valores de las posiciones del array en cada iteración (0, 1, 2, etc.), por eso la utilizo como indice para acceder a cada posición: palabras[i].

Cada una de las palabras es un String, por eso puedo utilizar las dos funciones que ya vimos anteriormente: substring() y toUpperCase(). Si te fijas estoy utilizando estos dos métodos exactamente igual que lo hice en el apartado anterior, convirtiendo el primer carácter a mayúscula (palabras[i].substring(0,1).toUpperCase()) y concatenándolo con el resto de caracteres sin alterar (palabras[i].substring(1)): palabras[i].substring(0,1).toUpperCase() + palabras[i].substring(1).

El resultado lo almaceno en un nuevo objeto de tipo String al que he llamado resultado.

Tal vez estés pensando ¿Y por qué utilizas += en vez de sólo =? Buena pregunta. Piensa que el objetivo final no es tener las palabras por separado, sino que buscamos tener una única cadena con todas las palabras juntas. Al utilizar el operador + delante del operador de asignación, en cada iteración que hace el bucle se va concatenando la nueva palabra con todas las anteriores.

Solo falta un pequeño detalle. Si te limitas a concatenar cada palabra con las anteriores el resultado final será algo como esto:

PedroObtuvoUn5EnSuExamenDeC#

Faltan los espacios entre cada una de las palabras. Por eso añado esta instrucción en la línea 4: resultado += » «.

Lo que consigo con esto es que añada un espacio justo después de cada palabra. Si, después de la última palabra también. Pero quitar un espacio al final de una cadena es muy fácil, simplemente tienes que llamar al método trim(): resultado = resultado.trim().

El código completo quedaría así:

//dividir la cadena en palabras:
String cadena = "pedro obtuvo un 5 en su examen de C#";
String [] palabras = cadena.split(" ");

//capitalizar cada palabra:
String resultado = "";
for (int i=0; i<palabras.length; i++){
    resultado += palabras[i].substring(0,1).toUpperCase() + palabras[i].substring(1);
    resultado += " "; //espacio entre cada palabra
}
resultado = resultado.trim(); //elimina espacio final

System.out.println(resultado);

Y con todo esto ya tendríamos el resultado esperado:

Pedro Obtuvo Un 5 En Su Examen De C#

Comments are closed.

Up ↑