CodeGym /Java блог /Случаен /Java Escape символи
John Squirrels
Ниво
San Francisco

Java Escape символи

Публикувано в групата
здрасти В предишни уроци вече се запознахме с текстови низове, които са представени от класа String в Java. Както вероятно си спомняте, низът е поредица от знаци. Тези знаци могат да бъдат всяHowви букви, цифри, препинателни знаци и т.н. Основното при създаването на низ е, че цялата последователност трябва да бъде оградена в кавички:

public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
Но Howво да правим, ако трябва да създадем низ, който сам по себе си трябва да съдържа кавички? Да предположим например, че искаме да кажем на света за любимата ви книга:

public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
Изглежда компилаторът не е доволен от нещо! Какъв според вас може да е проблемът? И Howво общо има с кавичките? Всъщност всичко е много просто. Компилаторът интерпретира кавичките по много специфичен начин, т.е. очаква низове да бъдат обвити в тях. И всеки път, когато компилаторът види ", той очаква, че кавичката ще бъде последвана от втора кавичка и че съдържанието между тях е текстът на низ, който трябва да бъде създаден от компилатора. В нашия случай кавичките около думата "Здрач" са в други кавички . Когато компилаторът стигне до тази част от текста, той просто не разбира Howво се очаква да направи. Кавичката подсказва, че трябва да се създаде низ. Но това е, което е компилаторът вечеправиш! Ето защо: просто казано, компилаторът се обърква Howво се очаква да направи. "Още една кавичка? Това няHowва грешка ли е? Вече създавам низ! Или трябва да създам още една? Арх!...:/" Трябва да уведомим компилатора, когато кавичката е команда ( "създайте низ!") и когато е просто символ ("покажете думата "Здрач" заедно с кавички!"). За да направи това, Java използва екраниране на знаци . Това се постига с помощта на специален символ: \ . Този символ обикновено се нарича "обратна наклонена черта". В Java обратна наклонена черта, комбинирана със знак, който трябва да бъде "екраниран", се нарича контролна последователност . Например \"е контролна последователност за показване на кавички на екрана. Когато срещне тази конструкция във вашия code, компилаторът ще разбере, че това е просто кавичка, която трябва да се покаже на екрана. Нека опитаме да променим нашия code с книгата:

public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is \"Twilight\" by Stephanie Meyer");
       System.out.println(myFavoriteBook);
   }
}
Използвахме \ , за да избегнем нашите две "вътрешни" кавички. Нека опитаме да изпълним метода main() ... Конзолен изход:
My favorite book is "Twilight" by Stephanie Meyer
Отлично! Кодът работи точно Howто искахме! Кавичките в ниHowъв случай не са единствените знаци, които може да трябва да избегнем. Да предположим, че искаме да кажем на някого за нашата работа:

public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("My work files are in D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
Още една грешка! Можете ли да познаете защо? За пореден път компилаторът не разбира Howво да прави. В края на краищата, компилаторът не познава \ като нищо друго освен контролна последователност ! Той очаква обратната наклонена черта да бъде последвана от определен знак, който трябва по няHowъв начин да се интерпретира по специален начин (като кавичка). Но в този случай \ е последван от обикновени букви. Така че компилаторът отново е объркан. Какво да правим? Абсолютно същото като преди: просто добавяме още един \ към нашия \ !

public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("My work files are in D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
Да видим Howво получаваме: Изход от конзолата:
My work files are in D:\Work Projects\java
Супер! Компилаторът незабавно определя, че \ са обикновени символи, които трябва да се показват заедно с останалите. Java има доста контролни последователности. Ето пълния списък:
  • \t - раздел.
  • \b - backspace (стъпка назад в текста or изтриване на един знак).
  • \n - нов ред.
  • \r - връщане на каретка. ()
  • \f - подаване на формуляр.
  • \' единичен цитат.
  • \" двоен кавичка.
  • \\ обратна наклонена черта.
Така, ако компилаторът срещне \n в текста, той разбира, че това не е просто символ и буква за показване на конзолата, а по-скоро специална команда за "преместване на нов ред!". Например, това може да е полезно, ако искаме да покажем част от стихотворение:

public class Main {
   public static void main(String[] args) {
       String byron = new String ("She walks in beauty, like the night, \nOf cloudless climes and starry skies\nAnd all that's best of dark and bright\nMeet in her aspect and her eyes...");
       System.out.println(byron);
   }
}
Ето Howво получаваме: Конзолен изход:
She walks in beauty, like the night, 
Of cloudless climes and starry skies 
And all that's best of dark and bright 
Meet in her aspect and her eyes...
Точно това, което искахме! Компилаторът разпозна изходната последователност и изведе откъс от стихотворението на 4 реда.

Бягство от Unicode символи

Друга важна тема, която трябва да знаете във връзка със знаците за екраниране, е Unicode. Unicode е стандартно codeиране на знаци, което включва символите на почти всеки писмен език в света. С други думи, това е списък от специални codeове, които представляват почти всеки знак на всеки език! Естествено, това е много дълъг списък и никой не го учи наизуст :) Ако искате да знаете откъде идва и защо се е наложил, прочетете тази информативна статия: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html Всички Unicode символни codeове имат формата " u+<шестнадесетична цифра>". Например, добре познатият символ за авторски права е представен от u00A9. Така че, ако трябва да използвате този знак, когато работите с текст в Java, можете да го екранирате във вашия текст! Например, ние искаме за да информираме всички, че CodeGym притежава авторските права върху този урок:

public class Main {
   public static void main(String[] args) {
       System.out.println("\"Escaping characters\", \u00A9 2019 CodeGym");
   }
}
Конзолен изход:
"Escaping characters", © 2019 CodeGym
Страхотно, всичко се получи! Но не става въпрос само за специални символи! Можете да използвате Unicode и екраниращи знаци, за да codeирате текст, написан едновременно на различни езици. И дори текст, написан на няколко различни диалекта на един и същи език!

public class Main {
   public static void main(String[] args) {

       System.out.println("\u004d\u0061\u006f \u005a\u0065\u0064\u006f\u006e\u0067 " + 

               "\u0028\u0054\u0072\u0061\u0064\u0069\u0074\u0069\u006f\u006e\u0061\u006c " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6fa4\u6771\u002c " +

               "\u0053\u0069\u006d\u0070\u006c\u0069\u0066\u0069\u0065\u0064 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065\u003a \u6bdb\u6cfd\u4e1c\u002c " +

               "\u0050\u0069\u006e\u0079\u0069\u006e\u003a \u004d\u00e1\u006f " +

               "\u005a\u00e9\u0064\u014d\u006e\u0067\u0029 \u0077\u0061\u0073 \u0061 " +

               "\u0032\u0030\u0074\u0068\u002d\u0063\u0065\u006e\u0074\u0075\u0072\u0079 " +

               "\u0043\u0068\u0069\u006e\u0065\u0073\u0065 " +

                "\u0073\u0074\u0061\u0074\u0065\u0073\u006d\u0061\u006e\u002c " +

               "\u0070\u006f\u006c\u0069\u0074\u0069\u0063\u0069\u0061\u006e\u002c " +

               "\u0061\u006e\u0064 \u0074\u0068\u0065 \u0063\u0068\u0069\u0065\u0066 " +

               "\u0074\u0068\u0065\u006f\u0072\u0065\u0074\u0069\u0063\u0069\u0061\u006e " +

               "\u006f\u0066 \u004d\u0061\u006f\u0069\u0073\u006d\u002e");
   }
}
Конзолен изход:
Mao Zedong (Traditional Chinese: 毛澤東, Simplified Chinese: 毛泽东, Pinyin: Máo Zédōng) was a 20th-century Chinese statesman, politician, and the chief theoretician of Maoism.
В този пример използвахме codeове на символи, за да изградим низ, състоящ се от английски и три (!) различни вида китайски йероглифи — традиционни, опростени и латински (пинин). И това обобщава всичко! Вече знаете достатъчно за екранирането на знаци, за да използвате този страхотен инструмент в работата си :) За да затвърдите наученото, ви предлагаме да гледате видео урок от нашия курс по Java
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION