JavaRush/Java блог/Random UA/Екранування символів у Java
Oleksandr Klymenko
13 рівень

Екранування символів у Java

Стаття з групи Random UA
учасників
Щось пішло не так! Ця стаття писалася як виконання тестового завдання посаду у команді JavaRush. І писалася як повноцінна лекція. За рахунок цього гарантую вам якість і кількість корисних знань, що накопичабося в цьому пості. Крім практичної та теоретичної інформації, у статті є цікаві факти, про які ви могли навіть не здогадуватися! Екранування символів у Java - 1Hello World! Екранування символів— це дуже цікаве та необхідне технічне рішення. Необхідність у екрануванні символів зіграло значної ролі історія всієї індустрії програмування. У цій статті ми поговоримо про те, що таке екранування символів, чому виникла потреба їх екранувати, і як екранування символів реалізовано Java. У статті наведено приклади та цікаві факти, пов'язані з темою екранування символів. Приємного читання! Вся інформація в комп'ютерній системі представлена ​​у вигляді тексту, який нижчому рівні представлений байтами. Коли ми пишемо листа чи повідомлення, ми набираємо текст, який буде зрозумілий для людини. Коли ми пишемо код у IDE, ми набираємо текст, який зможе розібрати компілятор. У Java текст можна подати у вигляді типуStringдля позначення даних якого використовуються керуючі символи - парні лапки.
String str = "Hello World!";
З текстом Hello World! ніяких проблем не виникає, але якщо цей текст необхідно виділити прямою мовою? Скориставшись правилами граматики стає ясно, що текст “Hello World!”, окрім керуючих символів від типу String, потрібно помістити в лапки прямої мови.
String str = "Java said, "Hello World!"";
Такий випадок буде неробочим, т.к. компілятор просто не зрозуміє в який момент закінчується ініціалізація змінної str. Для вирішення цієї та подібних їй проблем було придумано екранувати символи , тобто змінювати керуючі символи на так звані послідовності, що управляють, відомі також, як escape-послідовності . Нижче наведено список діючих escape-послідовностей java для використання у рядках. \t - Символ табуляції (у java - еквівалент чотирьох прогалин); \b- Символ повернення в тексті на один крок назад або видалення одного символу в рядку (backspace); \n- Символ переходу на новий рядок; \r- Символ повернення каретки; \f- Прогін сторінки до початку наступної сторінки; \'- Символ одинарної лапки; \"- символ подвійної лапки; \\— Символ зворотної косої межі ( \). Тепер давайте виділимо пряме мовлення у нашій фразі те щоб компілятор зміг без проблем розібрати написане.
String str = "Java said, \"Hello World!\"";
Таким чином, написаний текст зрозумілий і компілятор і людині, якщо вміст змінної strвивести на екран. Ми розібралися з тим, що таке екранування символів і для чого воно потрібне. І навіть екранували символ подвійної лапки! Приступимо до розбору escape-послідовностей, що залишабося. Символ табуляції у рядку позначається escape-послідовністю \tта є аналогом чотирьох прогалин. Однак, якщо довжина рядка, що складається з чотирьох пробілів, дорівнює довжині чотирьох символів, то довжина рядка з символом табуляції дорівнюватиме одному. Символ табуляції часто використовується для побудови таблиць чи псевдографічних елементів інтерфейсу, т.к. це зручніше запису чотирьох прогалин. Нижче наведено приклад псевдографічного інтерфейсу. Екранування символів у Java - 2Серед усіх escape-послідовностей символ \bмабуть найцікавіший, адже він дозволяє нам видалити останній символ у рядку виведення, подібно, якби ми прали його натисканням клавіші backspace .
System.out.print("2 + 2 = 5"); // На екрані відображається 2 + 2 = 5
System.out.print("\b");// На екрані відображається 2 + 2 =
System.out.print("4");// На екрані відображається 2 + 2 = 4
Символи \nі \rмають спільну історію – розглянемо їх разом. Зі символом перенесення рядка \nви могли зустрічатися раніше. Наприклад, якщо метод println()виводить інформацію так, що наступний висновок буде з нового рядка, то метод print()не виконує перенесення рядка після виведення, але якщо додати в кінець виводу символ \n, то перенесення рядка буде виконано.
System.out.print("Наступний висновок буде з нового рядка\n");
System.out.println("Наступний висновок буде з нового рядка");
Символ повернення каретки \rдозволяє нам повернути курсор до початку рядка виведення та відображати нову інформацію так, ніби раніше у цьому рядку нічого не було.
System.out.print("Текст, який потрібно переписати.");//На екрані відображається "Текст, який потрібно переписати."
System.out.print('\r');//На екрані порожньо
System.out.print("Новий текст.");//На екрані відображається "Новий текст."
Насправді повернення каретки бере початок ще з часів, коли текст друкували на друкарських машинках. Щоб виконати перенесення рядка, необхідно було пересунути каретку та опустити важіль (частини механізму друкарської машинки), після чого буде виконано перенесення рядка. Якщо ж важіль не опустити, можна було продовжувати друкувати у тому рядку. Що ми спостерігаємо, виводячи символ \r. У зв'язку з цим, коли програміст хотів виконати перенесення рядка, він, за звичкою, наприкінці виводу виконував послідовність із символів \r\n. Коли ера друкарських машинок добігла кінця, з'явилося покоління програмістів, які все ще використовували цю послідовність, хоча самі за друкарською ніколи не працювали. Вони часто забували в якому порядку необхідно було виконати цю послідовність — \r\nабо\n\r. Тоді їм на допомогу прийшло перевірочне слово return, де видно порядок виведення цих символів. Однак пізніше при розробці програмного забезпечення на перші версії Windows після MS-DOS програмісти змушені були використовувати послідовність \r\n. Зараз про це можна не турбуватися і для перенесення рядка використовувати тільки символ \n. Екранування символів у Java - 3Повернемося ще раз у минуле, приблизно у 80-ті роки. Саме тоді символ прогону сторінки \fна початок наступної сторінки мав популярність. У той час були великі лінійні принтери, для роботи з якими необхідно було писати програмний код, що містить і як принтер повинен надрукувати. І для позначення, що текст необхідно почати друкувати з нової сторінки, використовувався символ.\f. В наш час цей символ давно втратив свою актуальність, і навряд чи ви з ним коли-небудь зіткнетеся. Розміри лінійного принтера дуже значні. Екранування символів у Java - 4З символами \’і \\так само як і з екрануванням подвійної лапки, приклад був на початку статті. Екранувати одинарну лапку доведеться, наприклад, для ініціалізації типу char одинарною лапкою.
char ch = '\'';
Екранувати символ зворотної косої риси необхідно для вказівки, що наступний символ не буде частиною escape-послідовності.
System.out.println("\\n - escape-послідовність перенесення рядка");
// Висновок: \n - escape-послідовність перенесення рядка
На практиці ж екранувати зворотний сліш частіше доводиться під час роботи з шляхами:
System.out.println("It's Java string: \"C:\\Program Files\\Java\\jdk1.7.0\\bin\"");
// Висновок: It's Java string: "C:\Program Files\Java\jdk1.7.0\bin"
Я підкреслив, що дані escape-послідовності використовуються у рядках (рядкових літералах), т.к. решта їх частина використовується для опису регулярних виразів класу Patternі не відноситься до теми цієї статті. Тут можна ознайомитись зі списком всіх escape-послідовностей класу Pattern. Однак, варто відзначити, що регулярні вирази в тому вигляді, в якому вони є зараз, неможливо уявити без використання escape-послідовностей не тільки в java, але й в інших популярних програмах, наприклад, PHP. У java екранування символів використовується у форматуванні рядків. Наприклад, задаючи формат рядка для відображення символу відсотка, необхідно продублювати символ відсотка –%%, інакше отримаємо помилку, а IDE пропонуватиме дописати відсоток.
System.out.printf("Відсоток жирності молока: %d%%", 10);
// Відсоток жирності молока: 10%
На цьому стаття добігає кінця. Сподіваюся, ви дізналися багато нового про екранування символів і про те, як застосовувати це на практиці. Екранування символів притаманне багатьма мовами програмування. У java, як і в інших сі-подібних мовах, дана технологія реалізована майже однаково. Тому, отримані вами знання з цієї статті цілком можуть стати в нагоді не тільки в java. Дякуємо за увагу та удачі в навчанні!
Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.