JavaRush /Java Blog /Random-KO /Экранирование символов в Java
Oleksandr Klymenko
레벨 13
Харків

Экранирование символов в Java

Random-KO 그룹에 게시되었습니다
What-то пошло не так! Данная статья писалась How выполнение тестового задания на должность в команде JavaRush. И писалась How полноценная лекция. За счет этого гарантирую вам качество и количество полезных знаний скопившихся в этом посте. Помимо практической и теоретической информации, в статье присутствуют интересные факты, о которых вы могли даже не догадываться! Экранирование символов в Java - 1Hello World! Экранирование символов — это очень интересное и необходимое техническое решение. Необходимость в экранировании символов сыграло важную роль в истории всей индустрии программирования. В этой статье мы поговорим о том, что такое экранирование символов, почему появилась потребность их экранировать, и How экранирование символов реализовано в Java. В статье будут приведены примеры и интересные факты, связанные с темой экранирования символов. Приятного чтения! Вся информация в компьютерной системе представлена в виде текста, который на более низком уровне представлен byteами. Когда мы пишем письмо or сообщение, мы набираем текст, который будет понятен для человека. Когда же мы пишем code в IDE, мы набираем текст, который сможет разобрать компилятор. В Java текст можно представить в виде типа String, для обозначения данных которого используются управляющие символы - парные кавычки.

String str = "Hello World!"; 
С текстом “Hello World!” ниHowих проблем не возникает, но что если этот же текст необходимо выделить прямой речью? Воспользовавшись правилами грамматики становится ясно, что текст “Hello World!”, помимо управляющих символов от типа String, требуется поместить в кавычки прямой речи.

String str = "Java said, "Hello World!"";
Такой вариант будет нерабочим, т.к. компилятор попросту не поймет в Howой же момент заканчивается инициализация переменной str. Для решения этой и подобных ей проблем было придумано экранировать символы, то есть менять управляющие символы на так называемые управляющие последовательности, известные также, How escape-последовательности. Ниже приведен список действующих escape-последовательностей java для использования в строках. \t — Символ табуляции (в java – эквивалент четырех пробелов); \b — Символ возврата в тексте на один шаг назад or удаление одного символа в строке (backspace); \n — Символ перехода на новую строку; \r — Символ возврата каретки; \f— Прогон pages к началу следующей pages; \' — Символ одинарной кавычки; \" — Символ двойной кавычки; \\ — Символ обратной косой черты (\). Теперь давайте выделим прямую речь в нашей фразе так, чтобы компилятор смог без проблем разобрать написанное.

String str = "Java said, \"Hello World!\"";
Таким образом, написанный текст понятен и компилятору и человеку, если содержимое переменной str вывести на экран. Мы разобрались с тем, что такое экранирование символов и для чего оно нужно. И даже экранировали символ двойной кавычки! Приступим к разбору оставшихся escape-последовательностей. Символ табуляции в строке обозначается escape-последовательностью \t и является аналогом четырех пробелов. Однако, если длина строки, состоящая из четырех пробелов будет равна длине четырех символов, то длина строки с символом табуляции будет равна одному. Символ табуляции часто используется для построения таблиц or псевдографических элементов интерфейса, т.к. это удобнее записи четырех пробелов. Ниже пример псевдографического интерфейса. Экранирование символов в Java - 2Среди всех escape-последовательностей символ \b пожалуй самый интересный, ведь он позволяет нам удалить последний символ в строке вывода, подобно, если бы мы стирали его нажатием клавиши backspace.

System.out.print("2 + 2 = 5"); // Screen displays 2 + 2 = 5
System.out.print("\b");// Screen displays 2 + 2 =
System.out.print("4");// Screen displays 2 + 2 = 4
Символы \n и \r имеют общую историю - рассмотрим их вместе. С символом переноса строки \n вы могли встречаться ранее. Например, если метод println() выводит информацию так, что следующий вывод будет с новой строки, то метод print() не выполняет переноса строки после вывода, но если добавить в конец вывода символ \n, то перенос строки будет выполнен.

System.out.print("Next output will be on a new line\n");
System.out.println("Next output will be on a new line");
Символ возврата каретки \r позволяет нам вернуть курсор к началу строки вывода и отображать новую информацию так, How будто ранее в этой строке ничего не было.

System.out.print("Text to be rewritten.");//The screen displays "Text to be rewritten."
System.out.print('\r');//The screen is blank
System.out.print("New text.");//The screen displays "New text."
На самом деле возврат каретки берет свое начало еще со времен, когда текст печатали на печатных машинках. Whatбы выполнить перенос строки, необходимо было передвинуть каретку и опустить рычажок (части механизма печатной машинки), после чего будет выполнен перенос строки. Если же рычажок не опустить, то можно было продолжать печатать в той же строке. What мы и наблюдаем, выводя символ \r. В связи с этим, когда программист хотел выполнить перенос строки, он, по привычке, в конце вывода выполнял последовательность из символов \r\n. Когда эра печатных машинок подошла к концу, появилось поколение программистов, которые все еще использовали эту последовательность, хотя сами за печатной машинкой никогда не работали. Они часто забывали в Howом порядке необходимо было выполнить данную последовательность — \r\n or \n\r. Тогда им на помощь пришло проверочное слово return, где наглядно виден порядок вывода этих символов. Однако позже при разработке программного обеспечения на первые версии Windows, после MS-DOS, программисты вынуждены были использовать последовательность \r\n. Now же об этом можно не беспокоиться и для переноса строки использовать только символ \n. Экранирование символов в Java - 3Вернемся еще раз в прошлое, примерно в 80-е годы. Именно тогда символ прогона pages \f к началу следующей pages имел популярность. В то время были большие линейные принтеры, для работы с которыми необходимо было писать программный code, содержащий что и How принтер должен напечатать. И для обозначения, что текст необходимо начать печатать с новой pages использовался символ \f. В наше же время этот символ давно утратил свою актуальность, и навряд ли вы с ним когда-либо столкнетесь. Размеры линейного принтера весьма внушительны. Экранирование символов в Java - 4С символами \’ и \\ все точно также How и с экранированием двойной кавычки, пример был в начале статьи. Экранировать одинарную кавычку придется, например, для инициализации типа char одинарной кавычкой.

char ch = '\'';
Экранировать символ обратной косой черты необходимо для указания, что последующий символ не будет являтся частью escape-последовательности.

System.out.println("\\n - line break escape sequence");  
// Output: \n - line break escape sequence
На практике же экранировать обратный слеш чаще приходится при работе с путями:

System.out.println("It's Java string: \"C:\\Program Files\\Java\\jdk1.7.0\\bin\"");
// Output: It's Java string: "C:\Program Files\Java\jdk1.7.0\bin"
Я подчеркнул, что данные escape-последовательности употребляются в строках (строковых литералах), т.к. остальная их часть используется для описания регулярных выражений класса Pattern и не относится к теме данной статьи. Здесь можно ознакомиться со списком всех escape-последовательностей класса Pattern. Однако, стоит отметить, что регулярные выражения в том виде, в котором они есть сейчас, невозможно представить без использования escape-последовательностей не только в java, но и в других популярных языках программирования, например, PHP. В java экранирование символов используется и в форматировании строк. Например, задавая формат строки для отображения символа процента, необходимо продублировать символ процента – %%, иначе получим ошибку, а IDE будет предлагать дописать процент.

System.out.printf("Milk fat percentage : %d%%", 10); 
// Milk fat percentage : 10%
На этом статья подходит концу. Надеюсь, вы узнали много нового об экранировании символов, и о том, How применять это на практике. Экранирование символов присуще многим языкам программирования. В java, How и в других си-подобных языках данная технология реализована почти одинаково. Поэтому, полученные вами знания из этой статьи вполне могут пригодится не только в java. Спасибо за внимание и удачи в обучении!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION