JavaRush /مدونة جافا /Random-AR /هروب الشخصيات

هروب الشخصيات

نشرت في المجموعة
مرحبًا! في المحاضرات السابقة، تعرفنا بالفعل على السلاسل النصية، والتي يمثلها الفصل في Java String. كما تتذكر على الأرجح، السلسلة هي سلسلة من الأحرف. يمكن أن تكون الرموز أي شيء - أحرف وأرقام وعلامات ترقيم وما إلى ذلك. الشيء الرئيسي هو أنه عند إنشاء سلسلة، يتم وضع التسلسل بأكمله بين علامتي اقتباس:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
ولكن ماذا يحدث إذا أردنا إنشاء سلسلة تحتوي أيضًا على علامات اقتباس بداخلها؟ على سبيل المثال، نريد أن نخبر العالم عن كتابنا المفضل:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
يبدو أن المترجم غير سعيد بشيء ما! ما رأيك يمكن أن يكون سبب الخطأ، ولماذا حدث على وجه التحديد مع علامات الاقتباس؟ الحقيقة هي أن المترجم يدرك علامات الاقتباس بطريقة محددة بدقة، أي أنه يلف سلسلة فيها. وفي كل مرة يرى حرفًا "، يتوقع أن يتبعه نفس الحرف، وسيكون بينهما نص السطر الذي يجب على المترجم إنشائه. في حالتنا، علامات الاقتباس حول كلمة "الشفق" موجودة داخل علامات الاقتباس الأخرى . وعندما يصل المترجم إلى هذا الجزء من النص، فهو ببساطة لا يفهم ما يريده منه. يبدو أن هناك اقتباس، مما يعني أنه يجب إنشاء سلسلة. لكنه يفعل ذلك بالفعل! وهذا هو السبب بالتحديد. ببساطة، في هذه المرحلة يسيء المترجم فهم ما يريده منه. "اقتباس آخر؟ هل هذا نوع من الخطأ؟ لقد قمت بالفعل بإنشاء سلسلة! أم يجب أن أقوم بإنشاء سلسلة أخرى؟ Uhhh...:/" نحتاج أن نشرح للمترجم عندما يكون الاقتباس أمرًا له ("" قم بإنشاء سلسلة!")، وعندما يكون رمزًا بسيطًا ("اعرض كلمة "Twilight" مع علامات الاقتباس!"). ولتحقيق ذلك، تستخدم Java خاصية الهروب من الأحرف . ويتم ذلك باستخدام حرف خاص. مثله: \. في الحياة العادية يُطلق عليها اسم "الشرطة المائلة العكسية"، ولكن في Java يُطلق عليها (بالاشتراك مع الحرف المراد الهروب منه) اسم تسلسل الهروب . على سبيل المثال، \"هنا هو - تسلسل التحكم لعرض علامات الاقتباس على الشاشة. بعد أن واجه مثل هذا البناء داخل التعليمات البرمجية الخاصة بك، سوف يفهم المترجم أن هذا مجرد حرف "اقتباس" يجب عرضه على الشاشة. دعونا نحاول تغيير الكود الخاص بنا مع الكتاب:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
لقد هربنا من الاقتباسات "الداخلية" بـ \. دعونا نحاول تشغيل الطريقة main()... إخراج وحدة التحكم:

Моя любимая книга - "Сумерки" Стефани Майер
رائع، الكود يعمل تمامًا كما هو مطلوب! الاقتباسات ليست الحالة الوحيدة التي قد نحتاج فيها إلى الهروب من الشخصية. على سبيل المثال، أردنا أن نخبر أحد الأشخاص عن عملنا:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
ومرة أخرى خطأ! هل يمكنك بالفعل تخمين ما هو السبب؟ المترجم مرة أخرى لا يفهم ما يجب القيام به. بعد كل شيء، الرمز \بالنسبة له ليس أكثر من مجرد تسلسل تحكم ! ويتوقع أنه بعد الشرطة المائلة يجب أن يكون هناك بعض الأحرف التي يجب تفسيرها بطريقة خاصة (على سبيل المثال، علامة الاقتباس). ومع ذلك، هنا \تتبع الحروف العادية. لذلك يتم الخلط بين المترجم مرة أخرى. ما يجب القيام به؟ تمامًا مثل المرة الأخيرة: فقط أضف \واحدًا آخر إلى موقعنا \!
public class Main {

   public static void main(String[] args) {

       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\\Work Projects\\java");
       System.out.println(workFiles);

   }
}
دعونا نرى ما يخرج من هذا: إخراج وحدة التحكم:

Мои рабочие файлы лежат в папке D:\Work Projects\java
ممتاز! قرر المترجم على الفور أن هذه \كانت رموزًا عادية يجب إخراجها إلى وحدة التحكم مع الباقي. هناك عدد لا بأس به من تسلسلات الهروب في Java. وهنا قائمتهم الكاملة:
  • \t حرف علامة التبويب.
  • \b حرف إرجاع في النص خطوة واحدة للخلف أو حذف حرف واحد في سطر (مسافة للخلف).
  • \n حرف السطر الجديد.
  • \r حرف العودة.
  • \f تشغيل الصفحة.
  • \' حرف الاقتباس المفرد.
  • \" حرف الاقتباس المزدوج.
  • \\حرف الخط المائل العكسي (\).
وبالتالي، إذا واجه المترجم رمزًا في النص \n، فسوف يفهم أن هذا ليس مجرد رمز وحرف يجب إخراجهما إلى وحدة التحكم، ولكنه أمر خاص به - "قم بعمل فاصل أسطر!" على سبيل المثال، قد يكون هذا مفيدًا لنا إذا أردنا إخراج مقطع من قصيدة إلى وحدة التحكم:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
وهذا ما حصلنا عليه: إخراج وحدة التحكم:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
بالضبط ما هو مطلوب! تعرف المترجم على تسلسل الهروب وأخرج قطعة من الشعر في 4 أسطر.

يونيكود

موضوع آخر مهم تحتاج إلى معرفته فيما يتعلق بالهروب من الأحرف هو Unicode . Unicode هو معيار لترميز الأحرف يتضمن أحرفًا من جميع اللغات المكتوبة في العالم تقريبًا. بمعنى آخر، هذه قائمة من الرموز الخاصة، والتي يوجد بها رمز لأي حرف تقريبًا من أي لغة! بطبيعة الحال، هذه القائمة كبيرة جدًا ولا أحد يحفظها عن ظهر قلب :) إذا كنت مهتمًا بمصدرها وسبب الحاجة إليها، فاقرأ المقال الإعلامي عن حبرهابر . جميع رموز الأحرف في Unicode هي "حرف u+ رقم سداسي عشري". على سبيل المثال، يُشار إلى رمز حقوق الطبع والنشر الشهير بالرمز u00A9 . لذا، إذا كنت بحاجة إلى استخدام هذا الحرف عند العمل مع نص في Java، فيمكنك الهروب منه في النص الخاص بك! على سبيل المثال، نريد أن نعلم الجميع أن هذه المحاضرة محمية بحقوق الطبع والنشر بواسطة JavaRush:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
إخراج وحدة التحكم:

Лекция "Экранирование символов", © 2018 Javarush
عظيم، كل شيء على ما يرام! لكن الشخصيات الخاصة ليست كل شيء! باستخدام Unicode والهروب من الأحرف، يمكنك تشفير النص المكتوب بلغات مختلفة في نفس الوقت. وحتى بعدة لهجات مختلفة لنفس اللغة!
public class Main {
   public static void main(String[] args) {

       System.out.println("\u041c\u0430\u0301\u043e " +
               "\u0426\u0437\u044d\u0434\u0443\u0301\u043d " +
               "\u0028\u043a\u0438\u0442\u002e \u0442\u0440\u0430\u0434\u002e " +
               "\u6bdb\u6fa4\u6771\u002c \u0443\u043f\u0440\u002e " +
               "\u6bdb\u6cfd\u4e1c\u002c \u043f\u0438\u043d\u044c\u0438\u043d\u044c\u003a " +
               "\u004d\u00e1\u006f \u005a\u00e9\u0064\u014d\u006e\u0067\u0029 " +
               "\u2014 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 " +
               "\u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 " +
               "\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 " +
               "\u0434\u0435\u044f\u0442\u0435\u043b\u044c \u0058\u0058 \u0432\u0435\u043a\u0430\u002c " +
               "\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u043a " +
               "\u043c\u0430\u043e\u0438\u0437\u043c\u0430\u002e");
   }
}
إخراج وحدة التحكم:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
في هذا المثال، بعد معرفة رموز الأحرف، كتبنا سلسلة تتكون من الأبجدية السيريلية وثلاثة (!) أنواع مختلفة من كتابة الأحرف الصينية - الكلاسيكية والمبسطة واللاتينية (بينيين). هذا هو الأساس! الآن أنت تعرف ما يكفي عن الهروب من الشخصية لاستخدام هذه الأداة في عملك :) إذا لم يكن كل شيء واضحًا تمامًا، أنصحك بقراءة هذا المقال : سيكون إضافة جيدة.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION