JavaRush /Blog Java /Random-ES /Personajes que escapan

Personajes que escapan

Publicado en el grupo Random-ES
¡Hola! En conferencias anteriores, ya nos hemos familiarizado con las cadenas, que están representadas por clases en Java String. Como probablemente recuerdes, una cadena es una secuencia de caracteres. Los símbolos pueden ser cualquier cosa: letras, números, signos de puntuación, etc. Lo principal es que al crear una cadena, toda la secuencia está entre comillas:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
Pero, ¿qué sucede si necesitamos crear una cadena que también tenga comillas dentro? Por ejemplo, queremos contarle al mundo sobre nuestro libro favorito:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
¡El compilador parece no estar contento con algo! ¿Cuál crees que podría ser el motivo del error y por qué ocurrió específicamente entre comillas? El hecho es que el compilador percibe las comillas de una manera estrictamente definida, es decir, envuelve una cadena en ellas. Y cada vez que ve un carácter ", espera que le siga el mismo carácter, y entre ellos estará el texto de la línea que él, el compilador, debe crear. En nuestro caso, las comillas que rodean la palabra "Crepúsculo" están dentro de otras comillas . Y cuando el compilador llega a este texto, simplemente no entiende lo que quiere de él. Parece que hay una comilla, lo que significa que debería crear una cadena. ¡Pero ya lo está haciendo! Ésta es precisamente la razón. En pocas palabras, en este punto el compilador no entiende lo que quiere de él. "¿Otra cita? ¿Es algún tipo de error? ¡Ya estoy creando una cadena! ¿O debería crear otra? Errr...:/" Necesitamos explicarle al compilador cuándo una cita es un comando para él (" ¡crea una cadena!"), y cuando es un símbolo simple ("¡muestra la palabra "Crepúsculo" junto con comillas!"). Para lograr esto, Java utiliza caracteres de escape . Esto se hace usando un carácter especial. Como esto: \. En la vida cotidiana se le llama "barra invertida", pero en Java (en combinación con el carácter del que se va a escapar) se llama secuencia de escape . Por ejemplo, \"aquí está: una secuencia de control para mostrar cotizaciones en la pantalla. Al encontrar una construcción de este tipo dentro de su código, el compilador comprenderá que se trata solo de un carácter de "comilla" que debe mostrarse en la pantalla. Intentemos cambiar nuestro código con el libro:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
Escapamos las dos comillas "internas" con un \. Intentemos ejecutar el método main()... Salida de la consola:

Моя любимая книга - "Сумерки" Стефани Майер
¡Genial, el código funcionó exactamente como era necesario! Las citas están lejos de ser el único caso en el que es posible que necesitemos escapar del personaje. Por ejemplo, queríamos contarle a alguien sobre nuestro trabajo:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
¡Y de nuevo un error! ¿Ya puedes adivinar cuál es el motivo? El compilador nuevamente no entiende qué hacer. Después de todo, ¡un símbolo \para él no es más que una secuencia de control ! Espera que después de la barra haya algún carácter que tendrá que interpretar de alguna manera especial (por ejemplo, una comilla). Sin embargo, aquí \siguen las cartas habituales. Entonces el compilador vuelve a estar confundido. ¿Qué hacer? Exactamente igual que la última vez: ¡sólo añade \uno más al nuestro \!
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
Veamos qué sale de esto: Salida de la consola:

Мои рабочие файлы лежат в папке D:\Work Projects\java
¡Súper! El compilador determinó instantáneamente que se \trataba de símbolos comunes que debían enviarse a la consola junto con el resto. Hay bastantes secuencias de escape en Java. Aquí está su lista completa:
  • \t carácter de tabulación.
  • \b un carácter de retorno en el texto un paso atrás o eliminar un carácter en una línea (retroceso).
  • \n carácter de nueva línea.
  • \r Carácter de retorno de carro.
  • \f ejecución de página.
  • \' carácter de comilla simple.
  • \" carácter de comilla doble.
  • \\carácter de barra invertida (\).
Por lo tanto, si el compilador encuentra un símbolo en el texto \n, entenderá que no es solo un símbolo y una letra que debe enviarse a la consola, sino un comando especial para ello: "¡hacer un salto de línea!" Por ejemplo, esto puede resultarnos útil si queremos enviar un fragmento de un poema a la consola:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
Y esto es lo que obtuvimos: Salida de la consola:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
¡Exactamente lo que se necesita! El compilador reconoció la secuencia de escape y generó un verso de 4 líneas.

Unicódigo

Otro tema importante que debes conocer en relación con el escape de caracteres es Unicode . Unicode es un estándar de codificación de caracteres que incluye caracteres de casi todos los idiomas escritos del mundo. En otras palabras, ¡esta es una lista de códigos especiales, en la que hay un código para casi cualquier carácter de cualquier idioma! Naturalmente, esta lista es muy larga y nadie se la aprende de memoria :) Si está interesado en saber de dónde viene y por qué era necesaria, lea el artículo informativo sobre Habrahabr . Todos los códigos de caracteres en Unicode son "letra u+ dígito hexadecimal". Por ejemplo, el famoso símbolo de copyright se indica con el código u00A9 . Entonces, si necesitas usar este carácter cuando trabajas con texto en Java, ¡puedes escaparlo en tu texto! Por ejemplo, queremos que todos sepan que los derechos de autor de esta conferencia pertenecen a JavaRush:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
Salida de consola:

Лекция "Экранирование символов", © 2018 Javarush
¡Genial, todo salió bien! ¡Pero los personajes especiales no lo son todo! Usando Unicode y el escape de caracteres, puedes codificar texto escrito en diferentes idiomas al mismo tiempo. ¡E incluso en varios dialectos diferentes de un mismo idioma!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u041c\u0430\u0301\u043e " +
               "\u0426\u0437\u044d\u0434\u0443\u0301\u043d " +
               "\u0028\u043a\u0438\u0442\u002e \u0442\u0440\u0430\u0434\u002e " +
               "\u6bdb\u6fa4\u6771\u002c \u0443\u043f\u0440\u002e " +
               "\u6bdb\u6cfd\u4e1c\u002c \u043f\u0438\u043d\u044c\u0438\u043d\u044c\u003a " +
               "\u004d\u00e1\u006f \u005a\u00e9\u0064\u014d\u006e\u0067\u0029 " +
               "\u2014 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 " +
               "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 " +
               "\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 " +
               "\u0434\u0435\u044f\u0442\u0435\u043b\u044c \u0058\u0058 \u0432\u0435\u043a\u0430\u002c " +
               "\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a " +
               "\u043c\u0430\u043e\u0438\u0437\u043c\u0430\u002e");
   }
}
Salida de consola:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
En este ejemplo, conociendo los códigos de caracteres, escribimos una cadena que consta del alfabeto cirílico y tres (!) tipos diferentes de escritura de caracteres chinos: clásico, simplificado y latino (pinyin). ¡Eso es básicamente todo! Ahora ya sabes lo suficiente sobre el escape de personajes para utilizar esta herramienta en tu trabajo :) Si no todo está del todo claro, te aconsejo que leas este artículo : será una buena adición.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION