Șir clasic

compilatorul va face ceva de genul:

String s = nou StringBuffer () Adăugați ("This").

Se va crea un obiect din clasa StringBuffer sau din clasa StringBuilder. linia "This" va fi adăugată la aceasta prin metoda append (). "One." "String". și obiectul rezultat al clasei StringBuffer sau StringBuilder va fi distribuit în tipul String al metodei.







Rețineți că caracterele din șiruri sunt stocate în codificare Unicode, în care fiecare caracter ocupă doi octeți. Tipul fiecărui caracter este char.

Înainte de a lucra cu un șir, ar trebui să fie creat, precum și obiectul oricărei clase. Acest lucru se poate face în mai multe moduri.

Cum se creează un șir

Cea mai ușoară modalitate de a crea un șir este să conectați un tip de String la o constantă string:

String s1 = "Acesta este un șir.";

String s2 = "Acesta este un șir lung de tip String," + "scris în două rânduri de text sursă";

Nu uitați de diferența dintre sirul gol String s = "". care nu conține simboluri și o referință null de referință s = null. fără să indice o linie și să nu fie un obiect.

Cea mai corectă modalitate de a crea un obiect din punctul de vedere al OOP este de a apela constructorul său în noua operație. Clasa String vă oferă mai mult de zece constructori:

 String () - creează un obiect cu un șir gol;

 String (String str) - copie constructor: de la un obiect este creat

o copie exactă, deci acest constructor este rar folosit;

 String (StringBuffer str) - o copie convertită a obiectului StringBuffer;

 String (StringBuilder str) - o copie convertită a obiectului StringBuilder;

 String (byte [] byteArray) - obiectul este creat din array byteArray byte;

 String (char [] charArray) - obiectul este creat din matricea charArray de caractere Unicode;

 String (byte [] byteArray, int offset, int count) - obiectul este creat din partea array-

octet byteArray. începând cu compensarea indexului și conținând octeți de numărare;

 String (char [] charArray, int offset, int count) este aceeași, dar matricea constă dintr-

 String (int [] intArray, int offset, int count) este aceeași, dar matricea constă din caractere

Unicode, scris într-o serie de tip întreg, care permite utilizarea caracterelor Unicode care ocupă mai mult de două octeți;

 String (byte [] byteArray, codificare String) - caractere scrise în matricea byte,

Setați într-un șir Unicode cu codificarea codării;

 String (octet [] byteArray, int offset, int count, String codificare) este același, dar

numai pentru o parte din matrice;

 String (byte [] byteArray, Charset charset) - caractere scrise în matricea byte,

Setați într-un șir Unicode, ținând cont de codificarea specificată de obiectul de caractere;

 String (octet [] byteArray, int offset, int count, Charset charset) - același, dar

numai pentru o parte din matrice.

Dacă indicele sunt setate incorect, offset. numărătoarea sau codarea codificării, apare o excepție.

Constructorii care folosesc matricea octeților de octeți. sunt proiectate pentru a crea un șir Unicode dintr-o serie de codificări de caractere ASCII de byte. Această situație apare atunci când citiți fișierele ASCII, extragând informații din baza de date sau când trimiteți informații prin rețea.







În cel mai simplu caz, compilatorul va adăuga octetul zero principal la fiecare octet pentru a obține caractere de două octeți Unicode. Se va obține intervalul "\ u0000" - "\ u00FF" al codării Unicode corespunzător codurilor Latin1. Textele scrise în chirilic nu vor fi afișate corect.

În cazul în care computerul face o instalare locală, așa cum se spune în jargonul „instalate la nivel local“ (locale) (în MS Windows se execută utilitarul Regional Options (Setări regionale) în Control Panel (Panou de control)), compilatorul va citi aceste setări, va crea caractere Unicode corespunzătoare paginii de cod local. În versiunea rusificată a MS Windows este de obicei codul paginii CP1251.

Dacă matricea originală cu text chirilic ASCII a fost codificată în CP1251, atunci șirul Java va fi creat corect. Chirilicul va intra în codul său "\ u0400" - "\ u04FF" Unicode.

Dar alfabetul chirilic are cel puțin patru codificări:

 MS-DOS utilizează codarea CP866;

• UNIX utilizează de obicei codarea KOI8-R;

 Codificarea MacCrilllică este utilizată pe computerele Apple Macintosh;

 există, de asemenea, codificarea internațională a standardului chirilic ISO8859-5.

De exemplu, octetul 11100011 (0xE3 - în formă hexagonală) în codificarea CP1251 reprezintă litera chirilică G. în codarea CP866 - litera y. În codificarea KOI8-R, litera C. în ISO8859-5 este litera y. în MacCrilllic - scrisoarea lui.

Dacă textul original ASCII chirilic era în una dintre aceste codificări, iar codificarea locală este CP1251, caracterele Unicode ale șirului Java nu se potrivesc cu chirilicul.

În aceste cazuri, sunt utilizați ultimii patru constructori, în care parametrul de codare sau caractere specifică ce tabel de cod să folosească la construirea șirului.

System.out.print (msg + "Cp1251:"); System.out.write (byteCp1251); System.out.println (); System.out.print (msg + "Cp866."); System.out.write (byteCp866); System.out.println (); System.out.print (msg + "KOI8-R:"); System.out.write (byteKOI8R);

> captură (excepție e)

System.out.println (msg + "array de caractere." + S1); System.out.println (msg + "codificare implicită:" + s2); System.out.println (msg + "constant string" + S3); System.out.println ();

System.out.println (msg + "Cp1251 -> Cp1251:" + winLikeWin); System.out.println (msg + "Cp1251 -> Cp866." + WinLikeDOS); System.out.println (msg + "Cp1251 -> KOI8-R:" + winLikeUNIX); System.out.println (msg + "Cp866 -> Cp1251:" + dosLikeWin); System.out.println (msg + "Cp866 -> Cp866." + DosLikeDOS); System.out.println (msg + "Cp866 -> KOI8-R:" + dosLikeUNIX); System.out.println (msg + "KOI8-R -> Cp1251:" + unixLikeWin); System.out.println (msg + "KOI8-R -> Cp866." + UnixLikeDOS); System.out.println (msg + "KOI8-R -> KOI8-R:" + unixLikeUNIX);

În primele trei linii ale consolei, fără conversie în unicode, se afișează o serie de octeți

byteCp1251. byteCp866 și byteKOI8R. Aceasta se face prin metoda write () a clasei FilterOutputStream din pachetul java.io.

Următoarele trei linii ale consolei afișează șiruri Java derivate din matricea c [] de caractere. o serie de byteCp866 și un șir constant.

În continuare, liniile de consolă conțin matricele convertite.

Puteți vedea că numai matricea din codarea CP866, scrisă într-un șir folosind tabela de cod CP1251, este afișată corect pe consolă. Ce sa întâmplat? Aici, contribuția fluxului de simboluri la consolă sau la fișier contribuie la problema rusificării.

După cum se menționează în Capitolul 1. în fereastra consolei Command Prompt a sistemelor de operare MS Windows, textul este afișat în codarea CP866.

Pentru a ține cont de acest lucru, cuvintele "Rusia" în "sunt convertite într-o matrice de octeți care conține caractere în codarea CP866 și apoi traduse în șirul msg.

În linia penultimă din Fig. 5.1 a redirecționat ieșirea programului la fișierele codes.txt. În MS Windows, ieșirea textului într-un fișier apare în codarea CP1251. În Fig. 5.2 arată conținutul fișierului .txt în fereastra Notepad.

Fig. 5.2. Efectuarea unui șir chirilic la un fișier

După cum puteți vedea, alfabetul chirilic pare destul de diferit. Caracterele chiclice Unicode corecte sunt obținute dacă utilizați același tabel de cod în care este scrisă matricea originală de octeți.

Întrebările despre rusificare vor fi discutate în capitolele 9 și 24. Deocamdată, rețineți că atunci când creați un șir dintr-o matrice de octeți, este mai bine să specificați aceeași codificare chirilică în care este scrisă matricea. Apoi, veți obține un șir Java cu caracterele corecte Unicode.

Când exportați aceeași linie la consola, fereastra, fișierul sau transferul în rețea, este mai bine să convertiți șirul Java cu caractere Unicode în conformitate cu regulile de ieșire în locația dorită.

O altă modalitate de a crea un șir este utilizarea a două metode statice:







Articole similare

Trimiteți-le prietenilor: