משהו השתבש! מאמר זה נכתב כמשימת מבחן לתפקיד בצוות JavaRush. וזה נכתב כהרצאה מן המניין. בשל כך, אני מבטיח לכם את האיכות והכמות של הידע השימושי שנצבר בפוסט זה. בנוסף למידע מעשי ותיאורטי, המאמר מכיל עובדות מעניינות שאולי אפילו לא ידעתם עליהן!
שלום עולם! בריחה מדמות היא פתרון טכני מאוד מעניין והכרחי. הצורך בבריחה של דמויות שיחק תפקיד חשוב בהיסטוריה של תעשיית התכנות כולה. במאמר זה נדבר על מהי בריחה של תווים, מדוע יש צורך לברוח מהם, וכיצד מיושמת בריחת תווים בג'אווה. המאמר יספק דוגמאות ועובדות מעניינות הקשורות לנושא בריחת אופי. קריאה מהנה! כל המידע במערכת ממוחשבת מיוצג בצורה של טקסט, שברמה נמוכה יותר מיוצג על ידי בתים. כאשר אנו כותבים מכתב או הודעה, אנו מקלידים טקסט שיהיה מובן לאדם. כאשר אנו כותבים קוד ב-IDE, אנו מקלידים טקסט שהמהדר יכול לנתח. ב-Java, ניתן לייצג טקסט כסוג
תו הטאב בשורה מסומן על ידי רצף בריחה
מבין כל רצפי הבריחה, הסמל הוא
בואו נחזור שוב בזמן, בסביבות שנות ה-80. אז הפך הסמל לדף קדימה
עם סמלים
String
שהנתונים שלו מיוצגים על ידי תווי בקרה - מרכאות זוגיות.
String str = "Hello World!";
עם הטקסט "שלום עולם!" לא מתעוררות בעיות, אבל מה אם צריך להדגיש את אותו טקסט בדיבור ישיר? באמצעות כללי הדקדוק, מתברר כי הטקסט "שלום עולם!", בנוסף לתווי הבקרה מהסוג String
, חייב להיות ממוקם במרכאות דיבור ישיר.
String str = "Java said, "Hello World!"";
אפשרות זו לא תעבוד, כי המהדר פשוט לא יבין באיזה שלב מסתיים האתחול של המשתנה str
. כדי לפתור בעיה זו ודומותיה, הומצא ל-escape characters , כלומר לשנות את תווי הבקרה למה שנקרא רצפי בקרה, הידוע גם בשם רצפי בריחה . להלן רשימה של רצפי בריחה חוקיים של Java לשימוש במחרוזות. \t
- תו Tab (ב-java - שווה ערך לארבעה רווחים); \b
- תו חזרה בטקסט צעד אחד אחורה או מחיקת תו אחד בשורה (backspace); \n
- סמל קו חדש; \r
- סמל החזרת כרכרה; \f
— דלג על העמוד לתחילת העמוד הבא; \'
- תו ציטוט בודד; \"
- תו מרכאות כפולות; \\
— תו הנטוי האחורי ( \
). עכשיו בואו נדגיש את הדיבור הישיר בביטוי שלנו כדי שהמהדר יוכל לנתח בקלות את מה שכתוב.
String str = "Java said, \"Hello World!\"";
לפיכך, הטקסט הכתוב מובן הן למהדר והן לאדם אם תוכן המשתנה str
מוצג על המסך. הבנו מהי בריחה מדמות ולמה היא נחוצה. והם אפילו נמלטו מדמות המרכאות הכפולות! בואו נמשיך לניתוח רצפי הבריחה הנותרים.
מה עוד לקרוא: |
---|
\t
והוא מקביל לארבעה רווחים. עם זאת, אם אורכה של מחרוזת המורכבת מארבעה רווחים שווה לאורכם של ארבעה תווים, אז אורכה של מחרוזת עם תו tab יהיה שווה לאחד. תו הטאב משמש לעתים קרובות לבניית טבלאות או רכיבי ממשק פסאודו-גרפיים , מכיוון ש... זה יותר נוח מלכתוב ארבעה רווחים. להלן דוגמה לממשק פסאודו-גרפי. ![תווים בריחה ב-Java - 2](https://cdn.javarush.com/images/article/4572681f-f39e-471f-86c7-8b9e9b5eae17/1024.jpeg)
\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
מאפשר לנו להחזיר את הסמן לתחילת שורת הפלט ולהציג מידע חדש כאילו לא היה דבר קודם באותה שורה.
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."
למעשה, החזרת כרכרה מתוארכת לימים שבהם הטקסט הודפס על מכונות כתיבה. כדי לבצע הזנת קו, היה צורך להזיז את הכרכרה ולהוריד את הידית (חלק ממנגנון מכונת הכתיבה), ולאחר מכן תתבצע הזנת הקו. אם הידית לא הייתה מונמכת, אז אפשר היה להמשיך להדפיס על אותה שורה. זה מה שאנו רואים כאשר אנו מציגים את הסמל \r
. בהקשר זה, כאשר המתכנת רצה לבצע מעבר שורה, הוא, מתוך הרגל, ביצע רצף של תווים בסוף הפלט \r\n
. עם סיומו של עידן מכונת הכתיבה, היה דור של מתכנתים שעדיין השתמשו ברצף הזה, למרות שמעולם לא עבדו במכונת כתיבה בעצמם. לעתים קרובות הם שכחו באיזה סדר הם צריכים להשלים רצף נתון - \r\n
או \n\r
. ואז באה לעזרתם מילת מבחן return
, שבה הסדר שבו הוצגו סמלים אלה נראה בבירור. עם זאת, מאוחר יותר, בעת פיתוח תוכנה עבור הגירסאות הראשונות של Windows, לאחר MS-DOS, מתכנתים נאלצו להשתמש ברצף \r\n
. עכשיו אתה לא צריך לדאוג לגבי זה ולהשתמש רק בדמות כדי לשבור קו \n
. ![תווים בריחה בג'אווה - 3](https://cdn.javarush.com/images/article/34d3d84c-0416-4d82-8e98-4547cec8f893/1024.jpeg)
\f
לתחילת העמוד הבא פופולרי. באותה תקופה היו מדפסות קו גדולות, לעבודה איתן היה צורך לכתוב קוד תוכנה המכיל מה וכיצד על המדפסת להדפיס. וכדי לציין שיש להתחיל את הטקסט מדף חדש, נעשה שימוש בסמל \f
. בזמננו, סמל זה איבד מזמן את הרלוונטיות שלו, ואין זה סביר שאי פעם תתקלו בו. מידות המדפסת הליניארית מרשימים למדי. ![תווים בריחה בג'אווה - 4](https://cdn.javarush.com/images/article/e7980eba-23ea-4eed-a9c2-cea9eea64faf/1024.jpeg)
\’
והכל \\
זהה בדיוק כמו עם בריחה ממירכאה כפולה, הייתה דוגמה בתחילת המאמר. תצטרך לברוח מציטוט בודד, למשל, כדי לאתחל את סוג התו עם ציטוט בודד.
char ch = '\'';
בריחה מהתו הנטוי האחורי כדי לציין שהתו הבא לא יהיה חלק מרצף הבריחה.
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"
הדגשתי שרצפי הבריחה האלה משמשים במחרוזות (מיתרונים של מחרוזת), כי השאר משמשים לתיאור ביטויים רגולריים בכיתה Pattern
ואינם רלוונטיים לנושא המאמר הזה. כאן אתה יכול לראות רשימה של כל רצפי הבריחה של הכיתה Pattern
. עם זאת, ראוי לציין שלא ניתן לדמיין ביטויים רגולריים בצורה שבה הם קיימים כעת ללא שימוש ברצפי בריחה, לא רק ב-java, אלא גם בשפות תכנות פופולריות אחרות, למשל, PHP. ב-java, בריחה של תווים משמשת גם בעיצוב מחרוזת. לדוגמה, כאשר מציינים תבנית מחרוזת להצגת סמל האחוז, עליך לשכפל את סמל האחוז - %%
, אחרת נקבל שגיאה, וה-IDE יבקש ממך להוסיף את האחוז.
System.out.printf("Milk fat percentage : %d%%", 10);
// Milk fat percentage : 10%
בכך מסתיים המאמר. אני מקווה שלמדת הרבה על בריחת אופי וכיצד ליישם זאת. בריחת תווים טבועה בשפות תכנות רבות. ב-java, כמו בשפות אחרות דמויות C, הטכנולוגיה הזו מיושמת כמעט באופן זהה. לכן, הידע שאתה צובר ממאמר זה עשוי להיות שימושי לא רק ב-java. תודה על תשומת הלב ובהצלחה בלימודים!
GO TO FULL VERSION