• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
FORMACIÓN SAP

La clase de caracteres en Java

By s4pcademy 


char es un tipo de datos primitivo y no tiene métodos. Por esta razón, la clase Character en el paquete principal java.lang incluye una gran cantidad de métodos que son útiles para tratar con caracteres individuales; Muchos de estos métodos son estáticos. Esta clase incluye métodos para probar, como por ejemplo si un carácter es un dígito, una letra o un carácter especial.

¿Es eso así?

Lo que todos los métodos de prueba tienen en común es que comienzan con el prefijo is y devuelven un valor booleano. Además, hay métodos disponibles para convertir, por ejemplo, a mayúsculas o minúsculas. La siguiente lista incluye algunos ejemplos:

Resultados de algunos métodos is*()

Todos estos métodos «conocen» las propiedades de cada carácter Unicode. Además, el punto de código de cada carácter Unicode es siempre el mismo, independientemente de si el programa se ejecuta en Alemania o Mongolia.

Nota: El término «letra» no solo describe letras conocidas como «a» o «?». Unicode contiene más de 100.000 caracteres, incluidos cientos de letras y números.5

Probar si una cadena consta únicamente de dígitos

En el siguiente ejemplo, declararemos un método que se ejecutará a través de una cadena y probaremos si la cadena consta solo de dígitos. Aunque esta funcionalidad es útil en la práctica, Java Platform, Standard Edition (Java SE) no proporciona un método sencillo para ello.

public class IsNumeric {

   /**

     * Returns {@code true} if the String contains only Unicode digits.

     * An empty string or {@code null} leads to {@code false}.

     *

     * @param string Input String.

     * @return {@code true} if string is numeric, {@code false} otherwise.

     */

   public static boolean isNumeric( String string ) {

       if ( string == null || string.length() == 0 )

           return false;

       for ( int i = 0; i < string.length(); i++ )

           if ( ! Character.isDigit( string.charAt( i ) ) )

               return false;

      return true;

   }

   public static void main( String[] args ) {

       System.out.println( isNumeric( "1234" ) ); // true

       System.out.println( isNumeric( "12.4" ) ); // false

       System.out.println( isNumeric( "-123" ) ); // false

   }

}

Nuestro método define que una cadena nula y vacía no se considera numérica. También puede especificar que null debería generar una excepción y que una cadena vacía sea definitivamente numérica. Convenciones como estas dependen del autor de la biblioteca, y diferentes bibliotecas de utilidades con funciones auxiliares tienen diferentes usos.

Nuestro ejemplo utiliza dos métodos String: length() devuelve la longitud de una cadena y charAt(int) devuelve el carácter en la posición deseada. Un bucle itera sobre la cadena y prueba cada carácter con isDigit(…). Si un carácter no es un dígito, return false sale automáticamente del bucle. Si el bucle se ejecuta correctamente, un retorno verdadero puede informar que cada carácter era un dígito.

Descripción general de los métodos más importantes es*(…)

clase final java.lang.Personaje

implementa Serializable, Comparable

  • booleano estático esDigit(char ch)

¿Es un dígito entre 0 y 9?

  • booleano estático esLetra(char ch)

¿Es una carta?

  • booleano estático esLetraOrDigit(char ch)

¿Es un carácter alfanumérico?

  • booleano estático esLowerCase(char ch)
  • booleano estático esUpperCase(char ch)

¿Es una letra minúscula o una letra mayúscula?

  • booleano estático esWhiteSpace(char ch)

¿Es un espacio, un salto de línea, un retorno o una tabulación (es decir, espacio en blanco)?

Convertir caracteres a mayúsculas/minúsculas

Para convertir un carácter a mayúsculas/minúsculas, la clase Character declara los métodos toUpperCase(…) y toLowerCase(…). Los métodos is*(…) que llevan a cabo las pruebas se utilizan a menudo cuando se atraviesa una cadena.

Nuestro siguiente ejemplo le pide al usuario que ingrese una cadena. Las letras válidas deben convertirse a mayúsculas y cualquier espacio en blanco debe reemplazarse con un guión bajo. Para ejecutar la entrada, usaremos nuevamente los métodos String length() y charAt(int).

String input = new java.util.Scanner( System.in ).nextLine();

for ( int i = 0; i < input.length(); i++ ) {

   char c = input.charAt( i );

   if ( Character.isWhitespace( c ) )

       System.out.print( '_' );

   else if ( Character.isLetter( c ) )

       System.out.print( Character.toUpperCase( c ) );

}

Por ejemplo, para la entrada «honiara brotherhood guesthouse1», el resultado es «HONIARA_ BROTHERHOOD_GUESTHOUSE». El “1” desaparece porque no es ni un espacio en blanco ni una letra.

final class java.lang.Character

implements Serializable, Comparable<Character>

  • carácter estático en mayúsculas (char ch)
  • carácter estático en minúsculas (char ch)

Los métodos estáticos devuelven la letra mayúscula o minúscula correspondiente.

Nota: Los métodos toUpperCase(…) y toLowerCase(…) existen dos veces: una vez como métodos estáticos en Character (en cuyo caso, aceptan exactamente un carácter como argumento) y otra vez como métodos de objeto en objetos String. Se debe tener cuidado con Character.toUpperCase(‘s’) porque el resultado es “ß”, a diferencia del método String «s».toUpperCase(), devuelve el resultado “SS”, es decir, una cadena extendida en uno. Aunque ahora hay una “ß” mayúscula (Unicode U+00DF), Java todavía devuelve Unicode U+00DF, no U+1E9E, para Character.toUpperCase(‘s’).

Del carácter a la cadena

Para convertir un carácter Unicode en una cadena, puede utilizar el método de cadena estático sobrecargado valueOf(char). También existe un método comparable en Character, a saber, el método estático toString(char). Ambos métodos están limitados porque el carácter Unicode puede tener sólo 2 bytes de longitud. El método estático Character.toString(int) crea una cadena para cualquier carácter Unicode y, por tanto, Character.toString(128123) da como resultado una cadena con un fantasma.

De char a int: de carácter a número*

Cuando los caracteres provienen de una entrada del usuario, a menudo se le solicita que los convierta en números. El dígito ‘5’ se convertirá en el valor numérico 5. Según las antiguas tradiciones de los hackers, la solución siempre fue restar el valor ‘0’. El cero ASCII ‘0’ tiene el valor char 48, y ‘1’ luego tiene el valor 49, hasta que ‘9’ finalmente llega a 57. Lógicamente, ‘5’ – ‘0’ = 53 – 48 = 5. La solución tiene el desventaja de trabajar sólo con dígitos ASCII.

Por ejemplo, una buena solución Java es convertir un carácter en una cadena y luego convertirlo mediante un método Integer, por ejemplo, de la siguiente manera:

charc=»5″;

int i = Integer.parseInt( String.valueOf(c) ); // 5

El método parseInt(…) está completamente internacionalizado y también convierte números decimales de otras escrituras, como hindi/sánscrito:

System.out.println( Integer.parseInt( » » ) ); // 5

Este método funciona pero no es eficaz para caracteres individuales en bucles. Hay otras dos formas disponibles, utilizando métodos estáticos de la clase Character.

El método getNumericValue(…)

El método Character getNumericValue(char) devuelve el valor numérico de un dígito. Por supuesto, este método también se ha internacionalizado. Considere el siguiente ejemplo:

int i = Character.getNumericValue( '5' );

System.out.println( i ); // 5

System.out.println( Integer.parseInt( " " ) ); // 5

El método es mucho más potente porque conoce el “valor” real de todos los caracteres Unicode, incluidos, por ejemplo, también los números romanos (I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII, L, C, D y M), que se colocan en el alfabeto Unicode a partir de \u2160:

System.out.println( Character.getNumericValue( ‘\u216f’ ) ); // 1000

El método Integer.parseInt(…) no puede manejar \u216f, por lo que Integer.parseInt(«\ u216f») genera una excepción.

Los métodos *dígito(…)

La clase Carácter también tiene métodos de conversión de dígitos con respecto a cualquier base, y viceversa.

clase final java.lang.Personaje

implementa Serializable, Comparable

  • dígito int estático (char ch, int radix)

Devuelve el valor numérico que tiene el carácter ch bajo la base; común es base 10. Por ejemplo, Character.digit(‘f’, 16) es igual a 15. Se permite cualquier sistema numérico con una base entre Character.MIN_RADIX (2) y Character.MAX_RADIX (36). Si no es posible realizar ninguna conversión, el valor de retorno es -1.

  • carácter estático paraDigit(int digit, int radix)

Convierte un valor numérico en un carácter. Por ejemplo, Character.forDigit(6, 8) es «6» y Character.forDigit(12, 16) es «c».

Ejemplo: El siguiente ejemplo convierte una cadena de dígitos en un número entero:

char[] chars = { '3', '4', '0' };

int result = 0;

for ( char c : chars ) {

   result = result * 10 + Character.digit( c, 10 );

   System.out.println( result );

}

The output is 3, 34, and 340.

Nota del editor: esta publicación ha sido adaptada de una sección del libro. Java: La guía completa Por Christian Ullenboom.




¿Qué es SAP Analytics Cloud?
Previo
¿Cómo se comparan SAP Build Apps y SAP Business Application Studio?
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.