CodeGym /בלוג Java /Random-HE /Java Escape Characters
John Squirrels
רָמָה
San Francisco

Java Escape Characters

פורסם בקבוצה
היי! בשיעורים קודמים כבר הכרנו מחרוזות טקסט, המיוצגות על ידי המחלקה String ב-Java. כפי שאתה בוודאי זוכר, מחרוזת היא רצף של תווים. תווים אלה יכולים להיות כל אותיות, ספרות, סימני פיסוק וכן הלאה. הדבר העיקרי בעת יצירת מחרוזת הוא שכל הרצף חייב להיות מוקף במרכאות:
public class Main {
   public static void main(String[] args) {
       String alex = new String ("My name is Alex. I'm 20!");
   }
}
אבל מה עושים אם אנחנו צריכים ליצור מחרוזת שבעצמה חייבת להכיל מרכאות? לדוגמה, נניח שאנחנו רוצים לספר לעולם על הספר האהוב עליך:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("My favorite book is "Twilight" by Stephanie Meyer");
   }
}
נראה שהמהדר לא מרוצה ממשהו! מה לדעתך יכולה להיות הבעיה? ומה זה קשור למרכאות? למעשה, הכל מאוד פשוט. המהדר מפרש מרכאות בצורה מאוד ספציפית, כלומר מצפה שהמחרוזות יהיו עטופים בהן. ובכל פעם שהמהדר רואה ", הוא מצפה שאחריו המירכאות יבואו מרכאות שניות, ושהתוכן ביניהם הוא טקסט של מחרוזת שתיצור על ידי המהדר. במקרה שלנו, המירכאות סביב המילה "דמדומים" נמצאת בתוך מרכאות אחרות . כשהמהדר מגיע לקטע הטקסט הזה, הוא פשוט לא מבין מה הוא צפוי לעשות. המרכאות מרמזות שיש ליצור מחרוזת. אבל זה מה שהמהדר כבר עושה! הנה הסיבה: אם מדברים פשוט, המהדר מתבלבל לגבי מה שהוא צפוי לעשות. "עוד מרכאות? האם זו איזושהי טעות? אני כבר יוצר מחרוזת! או שאני צריך ליצור עוד אחד? ארג!...:/" עלינו ליידע את המהדר מתי מרכאות היא פקודה ("צור מחרוזת!") ומתי היא פשוט תו ("הצג את המילה "דמדומים" יחד עם מרכאות! "). לשם כך, Java משתמשת בריחת תווים . הדבר נעשה באמצעות סמל מיוחד: \ . סמל זה נקרא בדרך כלל "לאחור". ב-Java, קו נטוי משולב עם תו שיש "לחמוק" נקרא רצף בקרה לדוגמה, \" הוא רצף בקרה להצגת מרכאות על המסך. עם מפגש עם המבנה הזה בקוד שלך, המהדר יבין שזה רק מרכאות שצריך להציג על המסך. בואו ננסה לשנות את הקוד שלנו עם הספר:
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
מְעוּלֶה! הקוד עבד בדיוק כמו שרצינו! מרכאות הן בשום פנים ואופן לא התווים היחידים שאולי נצטרך כדי לברוח. נניח שאנחנו רוצים לספר למישהו על העבודה שלנו:
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);
   }
}
עוד שגיאה! אתה יכול לנחש למה? שוב, המהדר לא מבין מה לעשות. אחרי הכל, המהדר לא יודע \ בתור שום דבר מלבד רצף בקרה ! הוא מצפה שהאלכסון האחורי יבוא אחריו תו מסוים שהוא חייב איכשהו לפרש בצורה מיוחדת (כגון מרכאות). אבל, במקרה זה, אחריו מופיעות אותיות רגילות . אז המהדר שוב מבולבל. מה אנחנו צריכים לעשות? בדיוק אותו דבר כמו קודם: אנחנו פשוט מוסיפים עוד \ ל \ שלנו !
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);

   }
}
בוא נראה מה נקבל: פלט מסוף:
My work files are in D:\Work Projects\java
סוּפֶּר! המהדר קובע מיד שה- \ הם תווים רגילים שיש להציג יחד עם השאר. לג'אווה יש די הרבה רצפי שליטה. הנה הרשימה המלאה:
  • \t - טאב.
  • \b - backspace (צעד אחורה בטקסט או מחיקה של תו בודד).
  • \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);
   }
}
זה מה שאנחנו מקבלים: פלט מסוף:
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 הוא קידוד תווים סטנדרטי הכולל את הסמלים של כמעט כל שפה כתובה בעולם. במילים אחרות, זוהי רשימה של קודים מיוחדים המייצגים כמעט כל תו בכל שפה! כמובן, זוהי רשימה ארוכה מאוד ואף אחד לא לומד אותה בעל פה :) אם אתה רוצה לדעת מאיפה היא הגיעה ומדוע זה נחוץ, קרא את המאמר האינפורמטיבי הזה: https://docs.oracle.com/javase/tutorial/ i18n/text/unicode.html לכל קודי התווים של Unicode יש את הצורה " 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 ובתווי escape כדי לקודד טקסט שנכתב בו-זמנית בשפות שונות. ואפילו טקסט שנכתב בכמה דיאלקטים שונים של אותה שפה!
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.
בדוגמה זו, השתמשנו בקודי תווים כדי לבנות מחרוזת המורכבת באנגלית ושלושה(!) סוגים שונים של תווים סיניים - מסורתיים, מפושטים ולטיניים (Pinyin). וזה בערך מסכם את זה! עכשיו אתה יודע מספיק על דמויות בריחה כדי להשתמש בכלי הנהדר הזה בעבודה שלך :) כדי לחזק את מה שלמדת, אנו מציעים לך לצפות בשיעור וידאו מקורס Java שלנו
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION