Caracteres y secuencias de escape de Java

En este tema vamos a estudiar los caracteres que pueden aparecer en un programa Java. Ya sabemos como crear un programa básico, ahora veremos los caracteres que podemos usar para construir programas más complejos.

Character set: el conjunto de caracteres de Java

Para escribir un programa Java como en cualquier otro lenguaje de programación utilizamos caracteres. Como es lógico, hay una serie de restricciones y no podemos utilizar cualquier carácter que queramos a la hora de escribir un programa. Cada lenguaje determina el conjunto de caracteres (character set) que se pueden utilizar para escribir el código.

En muchos lenguajes de programación se utilizan los caracteres que contiene la tabla ASCII.

ASCII (American Standard Code for Information Interchange o Código Estándar Americano para el Intercambio de Información) es el estándar de codificación de caracteres más ampliamente utilizado. Asigna un valor numérico a cada letra, número, signo de puntuación y algunos otros caracteres especiales.

ASCII incluye 256 códigos divididos en dos grupos: estándar y extendido, de 128 códigos cada uno. El conjunto ASCII estándar utiliza 7 bits para cada código, lo que da como resultado 128 códigos desde 0 hasta 127.

ASCII estándar


El conjunto ASCII extendido utiliza 8 bits para cada código, dando como resultado 128 códigos adicionales, numerados desde el 128 hasta el 255.

ASCII extendido


En el conjunto de caracteres ASCII básico, los primeros 32 valores (Códigos del 0 al 31) son caracteres no imprimibles y están asignados a códigos de control. Por ejemplo, el código 13 corresponde a la tecla ENTER representada en la tabla por cr (CR por carriage return o “retorno de carro” término que provienen de las máquinas de escribir). También existen caracteres de control usados en teleprocesamiento como ACK (Acknowledge - aviso de mensaje recibido), BEL (bell - aviso por señal sonora), ETX (end of text – fin de texto), STX (start of text – comienzo de texto), etc.

Los 96 códigos restantes del código básico corresponden a los caracteres imprimibles y se asignan a los dígitos del 0 al 9, a las letras mayúsculas y minúsculas del alfabeto anglosajón, operadores aritméticos, etc.

Los códigos correspondientes al ASCII extendido, del 128 al 255, se asignan a aquellos caracteres que no pertenecen al alfabeto anglosajón, por ejemplo, las vocales con tilde, la ñ y en general todos los caracteres especiales que utilizan los distintos lenguajes.

Debido a lo limitado de su tamaño, el código ASCII no es suficiente para representar caracteres de alfabetos como el Japonés, Chino o árabe. La solución a este problema ha sido crear un código más grande con el que poder representar cualquier carácter de cualquier idioma: el código UNICODE.

El código UNICODE proporciona una única representación numérica para cada símbolo, independientemente del ordenador, el programa o el lenguaje de programación que se use.

La codificación Unicode se ha transformado en un estándar adoptado por las principales empresas de hardware y software.

Java utiliza la codificación Unicode para la representación de caracteres. El código Unicode actualmente representa los caracteres de la mayoría de idiomas escritos en todo el mundo.

Los 127 primeros caracteres de Unicode corresponden al código ASCII estándar.

La descripción completa del estándar y las tablas de caracteres están disponibles en la página web oficial de Unicode https://home.unicode.org/

Java soporta el sistema de codificación UNICODE y esto supone que el conjunto de caracteres del lenguaje sea muy amplio. ASCII es un subconjunto de UNICODE por lo tanto los caracteres ASCII siguen siendo válidos en Java.

Una vez visto lo anterior, los caracteres que pueden aparecer en un programa Java para formar las constantes, variables, expresiones, etc., son estos:
  • Las letras mayúsculas y minúsculas de la A(a) a la Z(z) de los alfabetos internacionales. Los caracteres ñ y Ñ son válidos así como las vocales acentuadas.
  • Dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • Los caracteres  ' _ ' '$'  y cualquier otro carácter considerado como letra en el sistema de codificación Unicode.
  • Los operadores y caracteres especiales siguientes:
+ - * / = % & # ! ? ^ “ ‘ ~ \ | < > ( ) [ ] { } :: ; . , ... @
  • Separadores
    • espacio
    • tabulador
    • salto de línea
  • Secuencias de escape: por ejemplo \t,  \n. Se explican a continuación
Los separadores como el tabulador y el salto de línea ayudan a que el programa sea más legible por las personas.
Por ejemplo, podemos escribir el método main sin utilizar espacios en blanco, de la forma:
public static void main(String [] args){System.out.println("Hola Mundo!!!");}
Aunque queda mucho más claro si introducimos tabuladores y saltos de línea:
public static void main(String [] args){
       System.out.println("Hola Mundo!!!");
}

Secuencias de escape

Una secuencia de escape esta formada por una barra inversa seguida de una letra, un carácter o de una combinación de dígitos.
Una secuencia de escape siempre representa un solo carácter aunque se escriba con dos o más caracteres. 
Se utilizan para realizar acciones como salto de línea o para usar caracteres no imprimibles. 
Las secuencias de escape definidas en Java son:


Secuencia de escape
Descripción
\n
Salto de línea. Sitúa el cursor al principio de la línea siguiente
\b
Retroceso. Mueve el cursor un carácter atrás en la línea actual.
\t
Tabulador horizontal. Mueve el cursor hacia adelante una distancia determinada por el tabulador.
\r
Mueve el cursor al principio de la línea actual.
\f
Mueve el cursor al principio de la siguiente página.
\"
Comillas. Representa el carácter comillas dobles.
\'
Comilla simple. Representa el carácter comilla simple.
\\
Barra inversa.
\udddd
Carácter Unicode. d representa un dígito hexadecimal del caracter Unicode.


Ejemplos de uso de las secuencias de escape en Java

A continuación veremos algunos ejemplos de uso de las secuencias de escape para poder entender mejor para qué sirven:

Ejemplo 1: uso de la secuencia de escape \n o salto de línea. Provoca un salto al principio de la línea siguiente en el lugar donde se coloca.
System.out.println("Juan\nVictor\nAlfonso\nEnrique");
Salida por pantalla:
Juan
Victor
Alfonso
Enrique

Ejemplo 2: Uso de la secuencia de escape \r. Provoca que el cursor se sitúe al principio de la línea siguiente.
System.out.println("Lunes\rMartes, Miércoles");
Salida por pantalla:
Martes, Miércoles

Ejemplo 3: Uso de la secuencia de escape \b. Provoca que el cursor retroceda un carácter.
System.out.println("Lunes\bMartes");
Salida por pantalla:
LuneMartes
Ejemplo 4: Uso de la secuencia de escape \t. Provoca que el cursor avance una distancia determinada.
System.out.println("Lunes\tMartes\tMiércoles");
Salida por pantalla:
Lunes    Martes    Miércoles
Ejemplo 5: Uso de las secuencias de escape \" y \'. Permite mostrar estos caracteres por pantalla.
System.out.println("\"Lunes\",\"Martes\",\'Miércoles\'");
Salida por pantalla:
"Lunes","Martes",'Miércoles'

9 comentarios:

  1. Me está ayudando mucho esto, vengo de PHP y esto es otro mundo, se agradece ;)

    ResponderEliminar
    Respuestas
    1. Me alegro de que te sea útil. Gracias por seguir el blog.

      Eliminar
  2. Para los identificadores, decir que sólo pueden empezar por una letra, y los caraceres _ y $.

    ResponderEliminar
  3. Hola, como sería para escribir mayor o igual que... juntos el símbolo mayor y el de igual. Gracias.

    ResponderEliminar
  4. Gracias Yesit, me alegro de que te esté siendo útil.

    ResponderEliminar
  5. Hola buenas tardes, para una cadena json como este:[{"cve_device":2,"cve_version":0,"device_version":"","version_id":"12","actual_fw":"","fw_to_update":"","user_cve":"123456","statusAccionInsertUpdate":1}]
    Como puedo evaluar sólo el puro "" sin que tome en cuenta el resto, estoy haciendo de esta forma: if (jsonFromJavaArrayList.contains("")) pero no funciona, se los agradecería bastante, saludos cordiales.

    ResponderEliminar
  6. Hola, Enrique. Me gusta mucho tu blog sobre iniciación en programación Java. Estoy empezando desde cero sin conocimientos previos y me ayudo mucho tu blog. ¿Dónde puedo encontrar más ejercicios básicos para practicar o cómo podría ponerme en contacto? Muchas gracias.

    ResponderEliminar