Un fragment de prelegere cu un mentor ca parte a cursului Universității Codegym. Înscrie-te la cursul complet.


„Salut, Amigo. Ați învățat odată că, pentru a scrie un șir de caractere în cod, trebuie să le înfășurați între ghilimele duble.”

"Da, și asta ne oferă un șir literal . Nu a fost cu mult timp în urmă când am aflat despre asta."

"În profesia noastră, asta a fost cu mult timp în urmă. Dar nu asta este ideea acum. În schimb, te rog să-mi spui ce să fac dacă avem nevoie de ghilimele în interiorul unui șir literal?"

„Hmm... Un șir care conține ghilimele – ce ar putea fi mai ușor. Sunt sigur că există o cale...”

"Da. Să presupunem că vrem să afișăm textul "Friends" was nominated for an "Oscar". Cum am face?"

"Ca să fiu sincer, habar n-am. Nu mă pot gândi la nimic."

„Nu vei putea ajunge la o soluție prin logică. Lasă-mă să-ți arăt ce trebuie să faci.

Cod Note
String s = ""Friends" was nominated for an "Oscar"";
Această opțiune nu va funcționa!”

„Această opțiune nu va funcționa, deoarece compilatorul interpretează acest lucru ca un cod complet diferit:

Cod Note
String s = ""Friends" was nominated for an "Oscar"";
Această opțiune nu va funcționa!”

„După ce compilatorul întâlnește ghilimele duble în cod, tratează ceea ce urmează ca începutul unui literal șir. Următoarele ghilimele duble indică sfârșitul literalului șir.”

„Deci, cum scrieți ghilimele duble într-un literal?”

„Există o modalitate. Se numește caractere de evadare . Scrieți doar ghilimele în șirul de text. Și înainte de ghilimele, adăugați simbolul \ ( bară oblică inversă ).

„Așa arată literalul șir atunci când este scris corect:

Cod Note
String s = "\"Friends\" was nominated for an \"Oscar\"";
Aceasta va funcționa!

„Compilatorul va interpreta totul corect și nu va considera ghilimelele de după bară oblică inversă ca pe ghilimele normale.

„În plus, dacă scoateți acest șir pe ecran, ghilimele cu bare oblice inverse vor fi procesate corect, iar textul va fi afișat fără bare oblice inverse:"Friends" was nominated for an "Oscar"

„Ei bine, nu am de gând să spun că acest lucru este foarte convenabil...”

„Dar ce poți face, acestea sunt regulile. Un alt punct important. Un ghilimele precedat de o bară oblică inversă reprezintă un singur caracter: pur și simplu folosim o notație elegantă care nu interferează cu capacitatea compilatorului de a recunoaște literalele șir în cod. Puteți atribui ghilimele unei charvariabile:

Cod Note
char c = '\"';
\"este un personaj, nu doi
char c = '"';
Acest lucru este, de asemenea, posibil: un ghilimele duble în interiorul ghilimelelor simple

Situații frecvente care apar la evadarea caracterelor

„Pe lângă ghilimele duble, există multe alte caractere pe care compilatorul le gestionează într-un mod special. De exemplu, o întrerupere de linie.

„Cum adăugăm o întrerupere de linie la un literal? Există și o combinație specială pentru aceasta:

\n
Caracter de întrerupere de linie

„Dacă trebuie să adăugați o întrerupere de linie la un șir literal, trebuie doar să adăugați câteva caractere” \n.

Exemplu:

Cod Ieșire de consolă
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

„Există în total 8 combinații speciale ca aceasta, care sunt numite și secvențe de evacuare . Iată-le:

Cod Descriere
\t Inserați un caracter tabulator
\b Introduceți un caracter înapoi
\n Introduceți un caracter de linie nouă
\r Introduceți un caracter de întoarcere car
\f Inserați un caracter de feed de pagină
\' Introduceți un singur ghilimele
\" Introduceți ghilimele duble
\\ Introduceți o bară oblică inversă

"Mi-ai arătat deja două dintre ele. Ce înseamnă celelalte 6?"

„Voi explica totul chiar acum.

\teste un caracter tabulator

Când acest text apare în text, este echivalent cu apăsarea Tabtastei în timpul tastării. Deplasează textul care îl urmează și face posibilă alinierea textului.

Exemplu:

Cod Ieșire de consolă
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

\bînseamnă „întoarce-te cu un caracter”

Această secvență într-un șir este echivalentă cu apăsarea Backspacetastei de pe tastatură. Îndepărtează caracterul care îl precede:

Cod Ieșire de consolă
System.out.println("Hello\b\b World");
Hel World

\reste caracterul de întoarcere a căruciorului

Acest caracter mută cursorul la începutul liniei curente fără a modifica textul (depinde de versiunea JDK). Indiferent ce va fi afișat în continuare, va suprascrie șirul existent.

Exemplu:

Cod Ieșire de consolă
System.out.println("Greetings\r World!");
World!ngs

\feste un caracter de feed de pagină

Acest simbol vine la noi din zilele primelor imprimante matriciale. Ieșirea acestei secvențe la o imprimantă ar face ca imprimanta să alimenteze pur și simplu foaia curentă, fără a imprima niciun text, până când începe o nouă pagină.

Acum l-am numi o întrerupere de pagină sau o pagină nouă .

\\este o bară oblică inversă

Totul este simplu aici. Dacă folosim o bară oblică inversă pentru a evada caracterele din textul nostru, atunci cum scriem un caracter oblică inversă în șir?

Este simplu: adăugați o bară oblică inversă textului - trebuie să scrieți două la rând.

Exemplu:

Cod Ieșire de consolă
System.out.println("c:\projects\my\first");
Compilatorul va țipa la tine pentru caractere necunoscute scăpate.
System.out.println("c:\\projects\\my\\first");
Așa se face bine!

„Folosirea dublelor bare are sens. Dar nu am reușit imediat să memorez totul în rest. Va trebui să mă bazez pe indicii tale.”

„Treptat, îți vei aminti de ce ai nevoie. Nu-ți face griji. Și pentru orice altceva, există Google.

Codificare Unicode

„Știți deja că fiecare caracter afișat pe ecran corespunde unui anumit cod numeric. Un set standardizat al acestor coduri se numește codificare .

„Odinioară, când computerele erau nou inventate, șapte biți (mai puțin de un octet) erau suficienți pentru a codifica fiecare caracter. Prima codificare conținea doar 128 de caractere. Această codificare se numea ASCII .

— Ăsta-i un nume ciudat.

"Nu este nimic ciudat în asta. Este o abreviere. ASCII înseamnă American Standard Code for Information Interchange — un tabel american standard de coduri pentru caractere imprimabile și unele coduri speciale."

„Constă din 33 de caractere de control neprintabile (care afectează modul în care sunt procesate textul și spațiile) și 95 de caractere imprimabile, inclusiv numere, litere latine mari și mici și mai multe semne de punctuație.

„Pe măsură ce computerele au crescut în popularitate, fiecare țară a început să-și lanseze propria codare. De obicei, au luat ASCII ca punct de plecare și au înlocuit caracterele ASCII rar folosite cu simboluri din alfabetele lor respective.

„De-a lungul timpului, a apărut o idee: creați o singură codificare care conține toate caracterele fiecărei codificări din lume.

Codificare Unicode

„Astfel, în 1993, a fost creată codificarea Unicode , iar limbajul Java a devenit primul limbaj de programare care a folosit această codificare ca standard pentru stocarea textului. Acum Unicode este standardul pentru întreaga industrie IT.

„Deși Unicode în sine este standardul, are mai multe reprezentări sau formate de transformare Unicode (UTF): UTF-8, UTF-16 și UTF-32 etc.

„Java folosește o versiune avansată de codificare Unicode — UTF-16: fiecare caracter este codificat pe 16 biți (2 octeți). Poate găzdui până la 65.536 de caractere! Puteți găsi aproape fiecare caracter din fiecare alfabet din lume în această codificare. "

— Sper că nu am nevoie să știu asta pe de rost?

„Dacă vrei, mergi!”

"Bine, bine. Voi folosi această regulă: nu poți ști totul, dar poți să găsești totul pe Google."

„Adoptarea unei abordări raționale este totul. Deci, pentru a scrie un caracter Unicode în programul dvs. folosind codul său, trebuie să scrieți \u+ codul în hexazecimal . De exemplu,\u00A9

Cod Ieșire de consolă
System.out.println("\u00A9 CodeGym");
© CodeGym

Unicode: punct de cod

„640 kilobytes ar trebui să fie suficienți pentru toată lumea! Sau nu”. Bill Gates a spus odată asta. Sau nu. Cel puțin acest citat îi este atribuit.”

„Haha. 640 de kiloocteți nici măcar nu sunt de ajuns pentru a încărca creierul unui robot de curățare”.

„Viața este dură și, de-a lungul timpului, codificarea UTF-16 a început să fie inadecvată. Se dovedește că există o mulțime de limbi asiatice și au o mulțime de glife. Și toate aceste glife pur și simplu nu pot fi înghesuite în 2 octeți. ."

"Deci ce facem?"

„Folosiți mai mulți octeți ! Dar tipul char este de doar 2 octeți și schimbarea lui la 4 nu este atât de ușoară: miliarde de linii de cod Java au fost scrise în toată lumea, care s-ar rupe dacă tipul char devine brusc 4 octeți un Java mașină. Deci nu putem schimba tipul de caractere!

„Există o altă abordare. Amintiți-vă cum scăpăm de caractere punând o bară oblică inversă în fața lor. Practic, am codificat un singur caracter folosind mai multe caractere. Creatorii Java au decis să folosească aceeași abordare.

„Unele caractere care apar vizual ca un singur caracter sunt codificate ca două chars într-un șir:

Cod Ieșire de consolă
System.out.println("\uD83D\uDD0A");
🔊

„Acum, programul tău Java poate scoate chiar și emoji-uri pe consolă 😎”

„Cu siguranță îl voi folosi pentru a mă distra puțin!”