Mayúsculas y minúsculas en Java

De ChuWiki


Veamos posibilidades de Java para convertir cadenas de texto a mayúsculas o minúsculas. Formas de verificar si un carácter es una letra, un número, un espacio, mayúscula, minúscula, etc.

Usaremos para los ejemplos una cadena con caracteres variados

// Cadena con mayúsculas, minúsculas, números y caracteres especiales.
// \u2164 es cinco en números romanos Ⅴ
String s = "aáA #1çº\u2164\t\n";

Métodos String toUpperCase() y toLowerCase()[editar]

La clase String tiene los métodos toLowerCase() para convertir la cadena a minúsculas y tuUpperCase() para convertirla a mayúsculas.

System.out.println(s.toLowerCase());
System.out.println(s.toUpperCase());

La salida de estas dos líneas es la siguiente

aáa #1çºⅴ	
AÁA #1ǺⅤ

Puedes ver que convierte, aparte de letras normales, las letras con acento, la cedilla ç y el cinco en números romanos (que no es una V sino una Ⅴ, distinto código unicode).

Métodos Character isLowerCase() e isUpperCase()[editar]

No hay métodos para ver si una cadena completa es mayúscula o minúscula. Tenemos que ir caracter a caracter y usar los métodos isLowerCase() y isUpperCase() de la clase Character.

El siguiente bucle

s.chars().forEach(l -> {
    System.out.printf("%c is LowerCase %b\n", l, Character.isLowerCase(l));
});

da la siguiente salida

a is LowerCase true
á is LowerCase true
A is LowerCase false
  is LowerCase false
# is LowerCase false
1 is LowerCase false
ç is LowerCase true
º is LowerCase true
Ⅴ is LowerCase false
	 is LowerCase false

 is LowerCase false

mientras que el siguiente bucle

s.chars().forEach(l -> {
    System.out.printf("%c is UpperCase %b\n", l, Character.isUpperCase(l));
});

devuelve la siguiente salida

a is UpperCase false
á is UpperCase false
A is UpperCase true
  is UpperCase false
# is UpperCase false
1 is UpperCase false
ç is UpperCase false
º is UpperCase false
Ⅴ is UpperCase true
	 is UpperCase false

 is UpperCase false

Puedes ver que las letras las hace correctamente, con acentos, cedillas o incluso el Ⅴ romano. Pero ambas devuelven false en todo aquello que no es capaz de interpretar como letra, es decir, espacios, tabuladores, números y símbolos como #.

Para verificar si una letra es mayúscula o minúscula, debemos verificar primero que, efectivamente, es una letra.

Métodos Character isDigit(), isLetter(), isAlphabetic(), isLetterOrDigit()[editar]

Los métodos isDigit(), isLetter(), isAlphabetic(), isLetterOrDigit() nos ayudan a ver qué tipo de caracter tenemos entre manos. El código sería similar al que hemos visto, pero llamando a estos métodos. Pongamos, para verlo más rápido, en forma de tabla el resultado de estos cuatro métodos para los caracteres del String

Método a á A # 1 ç º \t \n
isDigit() false false false false false true false false false false false
isLetter() true true true false false false true true false false false
isAlphabetic() true true true false false false true true true false false
isLetterOrDigit() true true true false false true true true false false false

Muchas casos son evidentes, veamos los "raros".

Uno es el número romano Ⅴ. isLetter() no lo considera una letra, puesto que en realidad representa un número. Pero isDigit() tampoco lo considera un dígito. isAlphabetic() si lo considera un caracter alfabético. De hecho, este tipo de letras que representan números es la única diferencia entre isLetter() e isAlphabetic(). El primero no los considera letrás, pero el segundo si lo considera un carácter alfabético.

No tenemos comportamientos raros con los acentos, cedillas o incluso con el º, que se considera letra.

Los símbolos como #, los espacios en blanco, tabuladores y retornos de carro no son ni dígitos ni letras.

Método Character isSpaceChar() e isWhitespace()[editar]

Estos métodos buscan caracteres "en blanco". La diferencia entre ellos es que isSpaceChar() sólo reconoce espacios en blanco, pero no tabuladores ni retornos de carro. isWhitespace() reconoce todos ellos. Nuevamente, lo ponemos en forma de tabla para que se vea más claro

Método a á A # 1 ç º \t \n
isSpaceChar() false false false true false false false false false false false
isWhitespace() false false false true false false false false false true true