JavaRush /Java Blogu /Random-AZ /Qaçan personajlar

Qaçan personajlar

Qrupda dərc edilmişdir
Salam! Əvvəlki mühazirələrdə biz Java-da sinif tərəfindən təmsil olunan sətirlərlə artıq tanış olmuşuq String. Yəqin xatırladığınız kimi, sətir simvollar ardıcıllığıdır. Simvollar hər hansı bir şey ola bilər - hərflər, rəqəmlər, durğu işarələri və s. Əsas odur ki, sətir yaradarkən bütün ardıcıllıq dırnaqlara daxil edilir:
public class Main {
   public static void main(String[] args) {
       String sasha = new String ("Меня зовут Саша, мне 20 лет!");
   }
}
Bəs içərisində dırnaq işarələri olan bir sətir yaratmalı olsaq nə olar? Məsələn, dünyaya sevimli kitabımız haqqında danışmaq istəyirik:
public class Main {
   public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - "Сумерки" Стефани Майер");
   }
}
Tərtibçi deyəsən nədənsə narazıdır! Sizcə, xətanın səbəbi nə ola bilər və niyə bu, xüsusi olaraq sitatlarla baş verdi? Fakt budur ki, kompilyator sitatları ciddi şəkildə müəyyən edilmiş şəkildə qəbul edir, yəni onlara bir sətir bükür. Və hər dəfə bir personajı görəndə "gözləyir ki, onun üçün eyni xarakter gələcək və onların arasında tərtibçinin yaratmalı olduğu sətir mətni olacaq. Bizim vəziyyətimizdə "Twilight" sözünün ətrafındakı dırnaq işarələri digər dırnaq işarələrinin içərisindədir . Və tərtibçi bu mətn parçasına gəldikdə, ondan nə istədiklərini sadəcə başa düşmür. Deyəsən, sitat var, yəni o, sətir yaratmalıdır. Ancaq o, artıq bunu edir! Səbəb məhz budur. Sadəcə olaraq, bu anda kompilyator ondan nə istədiklərini səhv başa düşür. "Başqa sitat? Bu bir növ xətadır? Mən artıq sətir yaradıram! Yoxsa başqasını yaratmalıyam? Uhhh...:/" Sitat onun üçün bir əmr olduqda tərtibçiyə izah etməliyik (" sətir yaradın!") və sadə simvol olduqda ("Twilight" sözünü dırnaq işarələri ilə birlikdə göstərin!"). Buna nail olmaq üçün Java simvoldan qaçışdan istifadə edir . Bu, xüsusi bir simvol istifadə edərək edilir. Bunun kimi: \. Adi həyatda buna "əks kəsik" deyilir, lakin Java-da (qaçılmalı olan xarakterlə birlikdə) qaçış ardıcıllığı adlanır . Məsələn, \"burada - ekranda sitatların göstərilməsi üçün idarəetmə ardıcıllığı. Kodunuzda belə bir konstruksiya ilə qarşılaşdıqdan sonra tərtibçi bunun sadəcə ekranda göstərilməli olan "sitat" simvolu olduğunu başa düşəcəkdir. Kitabla kodumuzu dəyişməyə çalışaq:
public static void main(String[] args) {
       String myFavoriteBook = new String ("Моя любимая книга - \"Сумерки\" Стефани Майер");
       System.out.println(myFavoriteBook);
   }
}
Biz iki "daxili" sitatdan \. Gəlin metodu işə salmağa çalışaq main()... Konsol çıxışı:

Моя любимая книга - "Сумерки" Стефани Майер
Əla, kod lazım olduğu kimi işlədi! Sitatlar, xarakterdən qaçmağa ehtiyac duya biləcəyimiz yeganə vəziyyətdən uzaqdır. Məsələn, işimiz haqqında kiməsə danışmaq istədik:
public class Main {
   public static void main(String[] args) {
       String workFiles= new String ("Мои рабочие файлы лежат в папке D:\Work Projects\java");
       System.out.println(workFiles);
   }
}
Və yenə səhv! Səbəbin nə olduğunu artıq təxmin edə bilərsinizmi? Kompilyator yenə nə edəcəyini başa düşmür. Axı, onun üçün bir simvol nəzarət ardıcıllığından\ başqa bir şey deyil ! O gözləyir ki, kəsikdən sonra hansısa xüsusi bir şəkildə şərh etməli olacaq bir simvol olmalıdır (məsələn, dırnaq işarəsi). Ancaq burada adi hərflər təqib olunur. Beləliklə, kompilyator yenidən qarışıqdır. Nə etməli? Keçən dəfə olduğu kimi eynidir: sadəcə bizimkinə daha birini əlavə edin ! \\\
public class Main {

   public static void main(String[] args) {

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

   }
}
Gəlin bundan nə çıxdığını görək: Konsol çıxışı:

Мои рабочие файлы лежат в папке D:\Work Projects\java
Super! Kompilyator dərhal müəyyən etdi ki, bunlar \qalanları ilə birlikdə konsola çıxarılmalı olan adi simvollardır. Java-da bir neçə qaçış ardıcıllığı var. Budur onların tam siyahısı:
  • \t nişan simvolu.
  • \b mətndə bir addım geriyə qaytarılan simvol və ya sətirdəki bir simvolun silinməsi (geri).
  • \n yeni sətir simvolu.
  • \r vaqonun qaytarılması xarakteri.
  • \f səhifə axını.
  • \' tək sitat xarakteri.
  • \" ikiqat sitat xarakteri.
  • \\əks kəsik işarəsi (\).
Beləliklə, tərtibçi mətndə simvolla qarşılaşarsa \n, o, başa düşəcək ki, bu, sadəcə konsola çıxarılmalı olan simvol və hərf deyil, bunun üçün xüsusi bir əmrdir - "sətir kəsin!" Məsələn, konsola bir şeir parçası çıxarmaq istəsək, bu bizim üçün faydalı ola bilər:
public class Main {
   public static void main(String[] args) {
       String borodino = new String ("Скажи-ка, дядя, \nВедь не даром \nМосква, спаленная пожаром, \nФранцузу отдана?");
       System.out.println(borodino);
   }
}
Və əldə etdiyimiz budur: Konsol çıxışı:

Скажи-ка, дядя, 
Ведь не даром 
Москва, спаленная пожаром, 
Французу отдана?
Tam olaraq nə lazımdır! Tərtibçi qaçış ardıcıllığını tanıdı və 4 sətirdə bir ayə parçası çıxardı.

Unicode

Xarakterdən qaçma ilə əlaqədar bilməli olduğunuz digər vacib mövzu Unicode- dur . Unicode, dünyanın demək olar ki, bütün yazılı dillərindən simvolları ehtiva edən simvol kodlaşdırma standartıdır. Başqa sözlə, bu, hər hansı bir dildən demək olar ki, hər hansı bir simvol üçün kodun olduğu xüsusi kodların siyahısıdır! Təbii ki, bu siyahı çox böyükdür və heç kim onu ​​əzbər öyrənmir :) Onun haradan gəldiyi və nə üçün lazım olduğu ilə maraqlanırsınızsa, Habrahabr haqqında məlumatlandırıcı məqaləni oxuyun . Unicode-da bütün simvol kodları “hərf u+ onaltılıq rəqəmdir”. Məsələn, məşhur müəllif hüququ simvolu kodu ilə göstərilir u00A9 . Beləliklə, Java-da mətnlə işləyərkən bu simvoldan istifadə etmək lazımdırsa, mətninizdə ondan qaça bilərsiniz! Məsələn, hər kəsə bildirmək istəyirik ki, bu mühazirənin müəllif hüquqları JavaRush tərəfindən qorunur:
public class Main {
   public static void main(String[] args) {
       System.out.println("Лекция \"Экранирование символов\", \u00A9 2018 Javarush");
   }
}
Konsol çıxışı:

Лекция "Экранирование символов", © 2018 Javarush
Əla, hər şey alındı! Ancaq xüsusi personajlar hər şey deyil! Unicode və simvoldan qaçışdan istifadə edərək, eyni anda müxtəlif dillərdə yazılmış mətni kodlaya bilərsiniz. Və hətta eyni dilin bir neçə fərqli dialektində!
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");
   }
}
Konsol çıxışı:

Ма́о Цзэду́н (кит. трад. 毛澤東, упр. 毛泽东, пиньинь: Máo Zédōng) — китайский государственный и политический деятель XX века, главный теоретик маоизма.
Bu misalda, simvol kodlarını bilməklə, biz kiril əlifbasından və üç (!) müxtəlif növ Çin simvollarının - klassik, sadələşdirilmiş və latın (pinyin) qeydlərindən ibarət bir sətir yazdıq. Əsasən budur! İndi bu aləti işinizdə istifadə etmək üçün xarakterdən qaçmaq haqqında kifayət qədər məlumatınız var :) Hər şey tam aydın deyilsə, bu məqaləni oxumağı məsləhət görürəm : bu yaxşı bir əlavə olacaq.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION