CodeGym /مدونة جافا /Random-AR /أحرف الهروب جافا
John Squirrels
مستوى
San Francisco

أحرف الهروب جافا

نشرت في المجموعة
أهلاً! في الدروس السابقة، تعرفنا بالفعل على السلاسل النصية، والتي يتم تمثيلها بواسطة فئة السلسلة في 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");
   }
}
يبدو أن المترجم غير سعيد بشيء ما! ما رأيك يمكن أن تكون المشكلة؟ وما علاقتها بعلامات الاقتباس؟ في الواقع، كل شيء بسيط للغاية. يفسر المترجم علامات الاقتباس بطريقة محددة للغاية، أي أنه يتوقع أن يتم تغليف السلاسل بها. وفي كل مرة يرى المترجم "، فإنه يتوقع أن علامة الاقتباس ستتبعها علامة اقتباس ثانية، وأن المحتوى بينهما هو نص سلسلة سيتم إنشاؤها بواسطة المترجم. في حالتنا، علامات الاقتباس حولها توجد كلمة "Twilight" داخل علامات اقتباس أخرى . عندما يصل المترجم إلى هذا الجزء من النص، فإنه ببساطة لا يفهم ما المتوقع منه القيام به. تشير علامة الاقتباس إلى أنه يجب إنشاء سلسلة. ولكن هذا هو المترجم أفعل بالفعل ! وإليكم السبب: ببساطة، يشعر المترجم بالارتباك بشأن ما يتوقع منه القيام به. "علامة اقتباس أخرى؟ هل هذا نوع من الخطأ؟ أنا بالفعل أقوم بإنشاء سلسلة! أم يجب أن أقوم بإنشاء واحدة أخرى؟ Argh!...:/" نحتاج إلى إعلام المترجم عندما تكون علامة الاقتباس أمرًا ("إنشاء سلسلة!") وعندما تكون مجرد حرف ("عرض كلمة "Twilight" مع علامات الاقتباس!) "). للقيام بذلك، تستخدم 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
ممتاز! يحدد المترجم على الفور أن \ هي أحرف عادية يجب عرضها مع الباقي. لدى Java الكثير من تسلسلات التحكم. وهنا القائمة الكاملة:
  • \t - علامة التبويب.
  • \b - مسافة للخلف (خطوة للخلف في النص أو حذف حرف واحد).
  • \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...
فقط ما أردناه! تعرف المترجم على تسلسل الهروب وأخرج مقتطفًا من القصيدة في أربعة أسطر.

الهروب من أحرف 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 وأحرف الهروب لتشفير النص المكتوب بلغات مختلفة في نفس الوقت. وحتى النص المكتوب بعدة لهجات مختلفة لنفس اللغة!
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.
في هذا المثال، استخدمنا رموز الأحرف لإنشاء سلسلة تتكون من اللغة الإنجليزية وثلاثة (!) أنواع مختلفة من الأحرف الصينية - التقليدية والمبسطة واللاتينية (بينيين). وأن حوالي يلخص الامر! الآن أنت تعرف ما يكفي عن الهروب من الشخصيات لاستخدام هذه الأداة الرائعة في عملك :) لتعزيز ما تعلمته، نقترح عليك مشاهدة درس فيديو من دورة Java الخاصة بنا

المزيد من القراءة:

تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION