CodeGym /Kurslar /Java SELF AZ /Simvolların ekranlaşdırılması

Simvolların ekranlaşdırılması

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Simvolların ekrana çıxarılmasının səbəbləri

Bir vaxtlar öyrənmişdiniz ki, kodda simvolları yazmaq üçün onları qoşa dırnaqlar arasına almaq lazımdır: bu, sətir literalı adlanır.

Bəs belə bir sual yaranır: əgər bizə dırnaqları sətir literalı daxilində göstərmək lazım olsa, nə edəcəyik? Dırnaq işarələrini ehtiva edən sətir - bu heç də mürəkkəb məsələ deyil.

Tutaq ki, biz Film "Dostlar" "Oskar"a namizəd oldu mətnini ekrana çıxarmaq istəyirik. Bunu necə etmək olar?

Kod Qeyd
String s = "Film "Dostlar" "Oskar"a namizəd oldu";
Bu variant işləmir!

Bütün məsələ ondadır ki, kompilyator burada tamamilə fərqli bir kod yazıldığını düşünür:

Kod Qeyd
String s = "Film "Dostlar" "Oskar"a namizəd oldu";
Bu variant işləmir!

Kompilyator kodda qoşa dırnaqlarla rastlaşdıqda, onları sətir literalının başlanğıcı kimi qəbul edəcək. Növbəti qoşa dırnaqları isə sətir literalının sonu hesab edəcək.

Bəs sətir literalı daxilində qoşa dırnaqları necə yazmaq olar?


2. Simvolların ekrana çıxarılması

Bir üsul var, buna hətta ad da verilib — simvolların ekrana çıxarılması. Sadəcə mətnin içərisində dırnaq işarələrini yazırıq, amma dırnaq işarələrindən əvvəl \ (tərs xətt ya da tərs slash ya da bekslash, ing. backslash) simvolunu əlavə edirik.

Budur, düzgün yazılmış sətir literalının görünüşü:

Kod Qeydlər
String s = "Film \"Dostlar\" \"Oscar\"-a namizəd göstərilib";
Bu işləyəcək!

Kompilyator hər şeyi düzgün başa düşəcək və tərs xətdən sonra yerləşən dırnaq işarələrini adi dırnaq işarələri kimi qəbul etməyəcək.

Bundan başqa, əgər bu sətiri ekrana çıxarsanız, tərs xəttlə birlikdə olan dırnaq işarələri düzgün işləniləcək və ekranda belə bir yazı görünəcək: Film "Dostlar" "Oscar"-a namizəd göstərilib

Başqa bir vacib məqam. Tərs xətlə müşayiət olunan dırnaq işarələri — bu, bir simvoldur: biz sadəcə kompiləyatorun koddakı sətir literalını tanımasına mane olmamaq üçün belə "hiyləgər" bir yazı üsulundan istifadə edirik. Siz dırnaqları char dəyişənə əlavə edə bilərsiniz:

Kod Qeydlər
char c = '\"';
\" — bir simvoldur, iki deyil
char c = '"';
bu da olar: cəftə dırnaq tək dırnaqların içində

3. Simvolların ekranirovu zamanı tez-tez yaranan vəziyyətlər

Simvolların ekranirovu zamanı tez-tez yaranan vəziyyətlər

İkiqat dırnaq işarələrindən başqa, kompilyator tərəfindən xüsusi şəkildə işlənən bir çox başqa simvol da var. Məsələn, sətir keçidi.

Sətir keçidini literala necə əlavə etmək olar? Bunun üçün də xüsusi bir kombinasiyası var:

\n
Sətir keçidi simvolu

Əgər sətir literala sətir keçidi əlavə etmək istəyirsinizsə, sadəcə \n simvolunu əlavə edin.

Misal:

Kod Ekranda çıxışı
System.out.println("Hörmətlə,\nAnonim");
             
Hörmətlə,
Anonim

Cəmi belə xüsusi kombinasiyadan 8 var: bunlara həm də escape-sekvensiyalar deyirlər, baxın burada:

Kod Təsvir
\t Tabulyasiya simvolunu əlavə edir
\b Bir simvol geri qayıtma simvolunu əlavə edir
\n Yeni sətr simvolunu əlavə edir
\r Karət sıfırlama simvolunu əlavə edir
\f Səhifə keçidi simvolunu əlavə edir
\' Tək dırnaq əlavə edir
\" İkiqat dırnaq əlavə edir
\\ Əks slash əlavə edir

Onlardan ikisi ilə tanış oldunuz, bəs qalan 6-sı nə deməkdir?

Tabulyasiya simvolu – \t

Bu simvol mətn daxilində klaviaturada Tab düyməsinə basmaqla eynidir. Sonrakı mətnin hizalanması üçün onu irəli çəkir.

Misal:

Kod Ekranda çıxışı
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

Bir simvol geri qayıtma – \b

Bu simvol mətn daxilində klaviaturada Backspace düyməsinə basmaqla eynidir. O, öncədən çıxmış son simvolu silir:

Kod Ekranda çıxışı
System.out.println("Salam\b\b Dünya");
Sala Dünya!

Karət sıfırlama simvolu – \r

Bu simvol kursori mövcud sətrin əvvəlinə çəkir, mətn dəyişmədən qalır. Növbəti çıxışı mətn mövcud olanı əvəz edəcək.

Misal:

Kod Ekranda çıxışı
System.out.println("Salam\rDünya!");
Dünya!

Səhifə keçidi simvolu – \f

Bu simvol ilk matris printerlərin dövründən qalmışdır. Belə bir simvolu çap etmək üçün printer mövcud səhifəni sadəcə sürüşdürərdi, heç bir mətn yazmadan, yeni vərəqə qədər.

Bugünkü dövrdə biz buna səhifə qırılması və ya yeni səhifə deyə bilərik.

Əks slash – \\

Əks slash simvolunun ekranirovu üçün istifadə olunduğunu nəzərə alsaq, bəs özünü ekranirov etmək üçün nə edək?

Sadədir: mətnə əks slash əlavə etmək üçün onu ardıcıl iki dəfə yazmaq lazımdır.

Misal:

Kod Ekranda çıxışı
System.out.println("c:\projects\my\first");
Kompilyator naməlum ekranirovu simvollarına şikayət edəcək.
System.out.println("c:\\projects\\my\\first");
Belə doğru!


4. Unicode Kodlama

Artıq bildiyiniz kimi, ekranda göstərilən hər simvol müəyyən bir rəqəm dəyərinə uyğundur. Belə rəqəm dəyərlərinin standartlaşdırılmış toplusuna kodlama deyilir.

Çox-çox əvvəl, kompüterlər yeni yarandığı dövrdə, bütün simvolları kodlamaq üçün yeddi bit (bir baytdan kiçik) kifayət edirdi - ilk kodlama cəmi 128 simvoldan ibarət idi. Bu kodlama ASCII adlanırdı.

ASCII (ing. American Standard Code for Information Interchange) — çap edilə bilən simvollar və bəzi xüsusi kodlar üçün Amerika standart kodlama cədvəlidir.

Bu cədvəl 33 çap edilməyən idarəetmə simvolundan (mətnin və boşluqların işlənməsinə təsir göstərən) və 95 çap edilə bilən simvoldan ibarət idi, buraya rəqəmlər, kiçik və böyük hərf formasında latın əlifbasının hərfləri və bir sıra durğu işarələri daxil idi.

Unicode Kodlama

Kompüterlərin populyarlığının artması ilə hər bir ölkə öz kodlamasını yaratmağa başladı. Adətən, ASCII əsas götürülürdü və az istifadə olunan simvollar milli əlifbaların simvolları ilə əvəz olunurdu.

Sonradan belə bir fikir meydana gəldi: bütün dünya kodlamalarının bütün simvollarını bir yerdə cəmləşdirən bir kodlama yaratmaq.

Unicode Kodlama 1

1993-cü ildə Unicode kodlaması yaradıldı və Java dili ilk proqramlaşdırma dili oldu ki, onu mətn saxlanması standartı kimi istifadə etdi. İndi isə Unicode — bütün İT sənayesinin standartıdır.

Hərçənd Unicode özü bir standartdır, onun bir neçə təqdim formasına malikdir (Unicode transformation format, UTF): UTF-8, UTF-16, UTF-32 və s.

Java-da Unicode kodlamasının inkişaf etmiş bir növü – UTF-16 istifadə olunur: burada hər bir simvol 16 bitlə (2 bayt) kodlaşdırılır. Bu kodlama 65,536 qədər simvolu əhatə edə bilir!

Bu kodlamada dünyanın demək olar ki, bütün əlifbalarının simvollarını tapmaq mümkündür. Amma təbii ki, onu əzbər bilmək mümkün deyil: hər şeyi bilmək lazım deyil, amma hamısını googledən tapmaq olar.

Unicode kodlamasının koduna əsasən proqram kodunda simvol yazmaq üçün \u + kodun onaltılıq rəqəmlərini yazmaq lazımdır. Məsələn, \u00A9

Kod Ekranda çıxış
 System.out.println("\u00A9 CodeGym");
© CodeGym


5. Unicode: codepoint

640 Kilobayt hər kəsə yetər! Yoxsa yox. (Bill Gates-ə aid edilən sitat)

Həyat — sərt bir şeydir və UTF-16 kodlaşdırmaları zamanla kifayət etməməyə başladı. Məlum oldu ki, Asiyada çox sayda dil var və onların çoxlu heroqlifləri var. Və bütün heroqlifləri 2 bayta yerləşdirmək sadəcə mümkün deyil.

Bəs nə etmək olar? Daha çox bayt istifadə etmək!

Amma problem burasındadır ki, char tipi cəmi 2 bayt tutur və onu 4 bayta dəyişmək o qədər də asan deyil: dünyada milyardlarla Java-da yazılmış kod sətri var ki, əgər birdən Java-makinada char tipi 4 bayt olsa, onlar düzgün işləməyəcək. Ona görə də char tipini dəyişmək olmaz!

Başqa bir yanaşma da var. Xatırlayın, biz simvolları əyri xətt prefiksi vasitəsilə necə ekranirovasiya edirdik. Əslində, biz bir neçə simvol vasitəsilə bir simvol kodlaşdırırdıq.

Java tərtibatçıları da bu yanaşmadan istifadə etməyə qərar verdilər.

Bəzi simvollar, görsən baxanda bir simvol kimi görünsələr də, sətrdə iki char ilə kodlanır:

Kod Ekranda çıxış
System.out.println("\uD83D\uDD0A");
🔊

İndi sizin Java proqramınız konsolda hətta emoji 😎 da göstərə bilər


Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION