Fragmento de una conferencia con un mentor como parte del curso de Codegym University. Inscríbete al curso completo.


"Saludos, Amigo. Érase una vez, aprendiste que para escribir una cadena de caracteres en código, necesitas envolverlos entre comillas dobles".

"Sí, y eso nos da una cadena literal . No fue hace mucho tiempo que descubrí esto".

"En nuestra profesión, eso fue hace mucho tiempo. Pero ese no es el punto en este momento. En cambio, dígame qué hacer si necesitamos comillas dentro de una cadena literal".

"Hmm... Una cadena que contiene comillas, lo que podría ser más fácil. Estoy seguro de que hay alguna manera..."

"Sí. Digamos que queremos mostrar el texto "Friends" was nominated for an "Oscar". ¿Cómo lo haríamos?"

"Para ser honesto, no tengo idea. No puedo pensar en nada".

"No podrás llegar a una solución a través de la lógica. Déjame mostrarte qué hacer.

Código notas
String s = ""Friends" was nominated for an "Oscar"";
¡Esta opción no funcionará!"

"Esta opción no funcionará porque el compilador interpreta esto como un código completamente diferente:

Código notas
String s = ""Friends" was nominated for an "Oscar"";
¡Esta opción no funcionará!"

"Después de que el compilador encuentra comillas dobles en el código, trata lo que sigue como el comienzo de una cadena literal. La siguiente comilla doble indica el final de la cadena literal".

"Entonces, ¿cómo escribes comillas dobles dentro de un literal?"

"Hay una manera. Se llama caracteres de escape . Simplemente escribe las comillas dentro de la cadena de texto. Y antes de las comillas, agrega el símbolo \ ( barra invertida ).

"Así es como se ve el literal de cadena cuando se escribe correctamente:

Código notas
String s = "\"Friends\" was nominated for an \"Oscar\"";
¡Esto funcionará!

"El compilador interpretará todo correctamente y no considerará las comillas después de la barra invertida como una comilla normal.

"Además, si muestra esta cadena en la pantalla, las comillas con barras invertidas se procesarán correctamente y el texto se mostrará sin barras invertidas:"Friends" was nominated for an "Oscar"

"Bueno, no voy a decir que esto es muy conveniente..."

"Pero qué puedes hacer, esas son las reglas. Otro punto importante. Una comilla precedida por una barra invertida representa un solo carácter: simplemente estamos usando una notación elegante que no interfiere con la capacidad del compilador para reconocer cadenas literales en nuestro código Puede asignar comillas a una charvariable:

Código notas
char c = '\"';
\"es un personaje, no dos
char c = '"';
Esto también es posible: una comilla doble dentro de comillas simples

Situaciones comunes que ocurren cuando se escapan personajes

"Además de las comillas dobles, hay muchos otros caracteres que el compilador maneja de manera especial. Por ejemplo, un salto de línea.

"¿Cómo agregamos un salto de línea a un literal? También hay una combinación especial para esto:

\n
Carácter de salto de línea

"Si necesita agregar un salto de línea a un literal de cadena, simplemente agregue un par de caracteres" \n.

Ejemplo:

Código Salida de consola
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

"Hay un total de 8 combinaciones especiales como esta, que también se llaman secuencias de escape . Aquí están:

Código Descripción
\t Insertar un carácter de tabulación
\b Insertar un carácter de retroceso
\n Insertar un carácter de nueva línea
\r Insertar un carácter de retorno de carro
\f Insertar un carácter de avance de página
\' Insertar una comilla simple
\" Insertar una comilla doble
\\ Insertar una barra invertida

"Ya me mostraste dos de ellos. ¿Qué significan los otros 6?"

"Te lo explicaré todo ahora mismo.

\tes un carácter de tabulación

Cuando este texto aparece en el texto, es equivalente a presionar la Tabtecla mientras se escribe. Desplaza el texto que le sigue y permite alinear el texto.

Ejemplo:

Código Salida de consola
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bsignifica 'retroceder un carácter'

Esta secuencia en una cadena es equivalente a presionar la Backspacetecla en el teclado. Elimina el carácter que le precede:

Código Salida de consola
System.out.println("Hello\b\b World");
Hel World

\res el carácter de retorno de carro

Este carácter mueve el cursor al principio de la línea actual sin cambiar el texto (depende de la versión de JDK). Lo que se muestre a continuación sobrescribirá la cadena existente.

Ejemplo:

Código Salida de consola
System.out.println("Greetings\r World!");
World!ngs

\fes un carácter de avance de página

Este símbolo nos llega desde los días de las primeras impresoras matriciales. Enviar esta secuencia a una impresora haría que la impresora simplemente alimentara la hoja actual, sin imprimir ningún texto, hasta que comience una nueva página.

Ahora lo llamaríamos salto de página o página nueva .

\\es una barra invertida

Todo es sencillo aquí. Si usamos una barra invertida para escapar de los caracteres en nuestro texto, entonces, ¿cómo escribimos un carácter de barra invertida en la cadena?

Es simple: agregue una barra invertida al texto; debe escribir dos seguidos.

Ejemplo:

Código Salida de consola
System.out.println("c:\projects\my\first");
El compilador le gritará por caracteres escapados desconocidos.
System.out.println("c:\\projects\\my\\first");
¡Así es como se hace bien!

"Usar barras dobles tiene sentido. Pero no he podido memorizar todo lo demás inmediatamente. Tendré que confiar en tus pistas".

"Gradualmente, recordarás lo que necesitas. No te preocupes. Y para todo lo demás, está Google.

Codificación Unicode

“Ya sabes que cada carácter que se muestra en la pantalla corresponde a un código numérico específico. Un conjunto estandarizado de estos códigos se denomina codificación .

"Érase una vez, cuando las computadoras se inventaron recientemente, siete bits (menos de un byte) eran suficientes para codificar cada carácter. La primera codificación contenía solo 128 caracteres. Esta codificación se llamó ASCII " .

"Ese es un nombre extraño."

"No tiene nada de extraño. Es una abreviatura. ASCII significa Código estándar estadounidense para el intercambio de información, una tabla de códigos estadounidense estándar para caracteres imprimibles y algunos códigos especiales".

Consta de 33 caracteres de control no imprimibles (que afectan la forma en que se procesan el texto y los espacios) y 95 caracteres imprimibles, incluidos números, letras latinas mayúsculas y minúsculas y varios signos de puntuación.

"A medida que las computadoras crecieron en popularidad, cada país comenzó a lanzar su propia codificación. Por lo general, tomaron ASCII como punto de partida y reemplazaron los caracteres ASCII que rara vez se usaban con símbolos de sus respectivos alfabetos.

"Con el tiempo, surgió una idea: crear una única codificación que contuviera todos los caracteres de todas las codificaciones del mundo.

Codificación Unicode

"Así, en 1993, se creó la codificación Unicode y el lenguaje Java se convirtió en el primer lenguaje de programación que utilizó esta codificación como estándar para almacenar texto. Ahora Unicode es el estándar para toda la industria de TI.

Aunque Unicode en sí es el estándar, tiene varias representaciones o formatos de transformación Unicode (UTF): UTF-8, UTF-16 y UTF-32, etc.

"Java utiliza una versión avanzada de la codificación Unicode: UTF-16: cada carácter está codificado en 16 bits (2 bytes). ¡Puede acomodar hasta 65 536 caracteres! Puede encontrar casi todos los caracteres de todos los alfabetos del mundo en esta codificación. "

"¿Espero no tener que saberlo de memoria?"

"¡Si quieres, hazlo!"

"Vale, está bien. Usaré esta regla: no puedes saberlo todo, pero puedes buscarlo todo en Google".

"Adoptar un enfoque racional lo es todo. Entonces, para escribir un carácter Unicode en su programa usando su código, necesita escribir \u+ el código en hexadecimal . Por ejemplo,\u00A9

Código Salida de consola
System.out.println("\u00A9 CodeGym");
© CodeGym

Unicode: punto de código

"¡640 kilobytes deberían ser suficientes para todos! O no". Bill Gates dijo una vez eso. O no. Al menos esta cita se le atribuye a él".

"Jaja. 640 kilobytes ni siquiera son suficientes para cargar el cerebro de un robot de limpieza".

"La vida es dura y, con el tiempo, la codificación UTF-16 comenzó a ser inadecuada. Resulta que hay muchos idiomas asiáticos y tienen muchos glifos. Y todos estos glifos simplemente no se pueden meter en 2 bytes. ."

"¿Asi que que hacemos?"

"¡Utilice más bytes ! Pero el tipo char es de solo 2 bytes y cambiarlo a 4 no es tan fácil: se han escrito miles de millones de líneas de código Java en todo el mundo, lo que se rompería si el tipo char de repente se convierte en 4 bytes a Java máquina ¡Así que no podemos cambiar el tipo de char!

"Hay otro enfoque. Recuerde cómo escapamos los caracteres poniendo una barra invertida delante de ellos. Básicamente, codificamos un solo carácter usando varios caracteres. Los creadores de Java decidieron usar el mismo enfoque.

"Algunos caracteres que aparecen visualmente como un solo carácter están codificados como dos chars en una cadena:

Código Salida de consola
System.out.println("\uD83D\uDD0A");
🔊

"Ahora su programa Java puede incluso enviar emojis a la consola 😎"

"¡Definitivamente lo usaré para divertirme!"