În acest tutorial, vă veți familiariza cu una dintre cele mai importante structuri de date de programare (tipuri) din Java - String-ul. Variabilele de șir pot fi folosite pentru a stoca datele textuale (litere, numere, simboluri) asociate unui program.
Aplicațiile Android sunt scrise în Java, un limbaj de programare. Java are un număr de tipuri de date primitive pentru diferite tipuri de numere (numere întregi, flotoare etc.), valori booleene și caractere unice. În plus față de stocarea datelor textuale ca matrice sau caractere, Java include, de asemenea, o clasă de obiecte puternice numită String (java.lang.String), care încapsulează cu ușurință datele textuale și poate fi utilizată pentru a manipula conținutul. În acest tutorial, veți învăța cum să creați, să utilizați și să manipulați șiruri în diferite moduri, inclusiv cum să le stocați ca resurse de proiect Android.
Din punct de vedere tehnic, nu aveți nevoie de niciun fel de instrumente pentru a finaliza acest tutorial, dar cu siguranță veți avea nevoie de ele pentru a dezvolta aplicații Android.
Pentru a dezvolta aplicații Android (sau orice aplicații Java, de pildă), aveți nevoie de un mediu de dezvoltare pentru a scrie și a construi aplicații. Eclipse este un mediu de dezvoltare foarte popular (IDE) pentru Java și IDE preferat pentru dezvoltarea Android. Este disponibil gratuit pentru sistemele de operare Windows, Mac și Linux.
Pentru instrucțiuni complete despre cum să instalați Eclipse (inclusiv versiunile acceptate) și SDK-ul Android, consultați site-ul Web pentru dezvoltatorii Android.
La cel mai fundamental nivel, programele Java sunt rupte în funcționalitate și date. Multe date care pot fi citite de om vin în forme de cuvinte, caractere, punctuație, numere și așa mai departe. Practic, orice utilizator poate tasta pe o tastatură. Programatorii numesc acest spațiu de stocare a conținutului textual "date de șir", dar datele în sine pot fi stocate utilizând o varietate de structuri de date diferite, în funcție de cerințele dvs.:
După cum puteți vedea, există numeroase moduri de stocare a datelor șir în Java. De exemplu, următoarele variabile Java reprezintă un șir de caractere vocale în diferite moduri (ca octeți, caractere, reprezentări Unicode sau sub-șiruri):
String strVowels = "aeiou"; char astrVowels [] = 'a', 'e', 'i', 'o', 'u'; octet abyteVowels [] = 'a', 'e', 'i', 'o', 'u'; octet abyteVowelsU [] = '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'; String uVowels = String nou ("\ u0061 \ u0069 \ u006F \ u0075"); CharSequence csVowels = (CharSequence) string nou ("aeiou"); StringBuffer sbVowels = nou StringBuffer ("a" + "e" + "iou"); StringBuilder sVowelBuilder = nou StringBuilder (); sVowelBuilder.append ( 'a'); sVowelBuilder.append ( "EIO"); sVowelBuilder.append ( '\ u0075');
Clasa String este clasa de comoditate utilizată cel mai des, mai ales de începători. Veți dori, de asemenea, să aveți o înțelegere trecătoare a interfeței CharSequence (java.lang.CharSequence), deoarece este adesea folosită atunci când lucrați cu resurse Android.
Clasa String este disponibilă ca parte a pachetului java.lang, care este inclus în Android SDK pentru dezvoltatori de utilizat. Documentația completă pentru clasa String poate fi găsită împreună cu documentația Android SDK.
Clasa String reprezintă o secvență imuabilă (neschimbată) de caractere Unicode (codificare pe 16 biți), potrivită pentru stocarea caracterelor în orice limbă (engleză, germană, japoneză și așa mai departe).
Deci, ce are de-a face cu dezvoltarea Android? Ei bine, șirurile sunt folosite pentru a stoca conținutul afișat pe ecranele aplicației sau pentru a stoca intrarea preluată de la un utilizator. Dezvoltatorii de Android încep să încarce, să creeze și să manipuleze datele de șir. Deci, să ne uităm la unele lucruri pe care le putem face cu clasa String.
Clasa String are numeroase constructori, pentru crearea și instanțierea variabilelor de șir. Variabilele de șir pot fi setate să fie goale utilizând cuvântul cheie null. De asemenea, puteți seta conținutul acestuia din byte, caracter sau alte date String. De exemplu, iată câteva moduri de a crea variabile String pentru a fi utilizate în cadrul aplicațiilor dvs. (unele sunt inițializate din variabilele, cum ar fi uVowels și sVowelBuilder, definite mai sus în acest tutorial):
String strVowels1 = "aeiou"; String strVowels2 = String nou ("aeiou"); String strVowels3 = String nou (sVowelBuilder); String strVowels4 = String nou (sbVowels); String strVowels5 = String nou (uVowels); String strVowels6 = String nou (abyteVowels2); String strVowels7 = șir nou (abyteVowelsU); String strVowels8 = String nou ("a" + "e" + "iou"); String strVowels9 = String nou (noul char [] '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'); String strVowels10 = String nou (nou byte [] '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075');
De asemenea, puteți încărca șiruri din resurse de aplicații Android, cu condiția să le stocați corect. De exemplu, puteți încărca resursa de șir pentru numele aplicației într-o variabilă String după cum urmează:
Stringul strAppName = getResources (). GetString (R.string.app_name);
Acest lucru necesită ca aplicația Android în cauză să conțină o resursă de șir denumită nume_applicație undeva în ierarhia directorului / res / values. De exemplu, un fișier numit /res/values/strings.xml care conține următoarea definiție a șirului XML:
Numele aplicației Android!
Acum, să ne uităm la unele lucruri reale pe care le puteți face obiectelor String. În primul rând, să ne concentrăm asupra funcțiilor disponibile în cadrul clasei String.
Este util să vă gândiți la un șir ca o succesiune de caractere. Ca atare, uneori doriți să iterați prin conținutul său, un caracter la un moment dat. Există numeroase moduri de a face acest lucru, dar o singură cale simplă este de a folosi o buclă pentru (). Puteți profita de metoda lungimii String () pentru a determina cât de multe caractere ai primit și metoda charAt () pentru a prelua un anumit caracter prin indexul său, la fel ca și cum ar fi un indice matrice. De exemplu:
String strVowels = "AEIOU"; pentru (int i = 0; i < strVowels.length(); i++) char curChar = strVowels.charAt(i);
Așa cum am menționat mai devreme, variabilele String sunt imuabile sau neschimbate. Aceasta nu înseamnă că nu puteți manipula conținutul textual al unei variabile String, dar fiecare metodă care returnează o nouă variabilă String. Unele exemple comune ale metodelor de clasă String care generează noi variabile String includ:
Rețineți că fiecare dintre aceste metode alocă a nou String object object pentru a stoca rezultatul. Variabila originală String rămâne neschimbată.
Uneori doriți să vă convertiți șirul în majuscule sau în litere mici. Un motiv pentru care ați putea dori să schimbați cazul unui șir este să normalizați șirul pentru a facilita implementarea căutării sau a potrivirii insensibile la litere mici.
String strUpperCaseVersion = strVowels.toUpperCase (); Stringul strLowerCaseVersion = strVowels.toLowerCase ();
Rețineți că aici ați creat două noi variabile String pentru utilizare. Variabila originală String, strVowels, rămâne neschimbată.
Uneori doriți să parsezi rapid un șir în substringuri. Puteți face acest lucru pentru a extrage cuvintele individuale dintr-o propoziție sau o listă de etichete delimitate etc. Puteți folosi expresii regulate simple cu funcția split () în acest scop. De exemplu, următorul cod extrage cuvintele individuale (culori) dintr-un String:
String someWords = "Red Orange galben verde albastru Indigo"; String aColors [] = someWords.split ("");
Dacă ați tipări conținutul matricei String numite aColors, ați vedea că:
aColori [0] = Red aColors [1] = Portocalii aColori [2] = Galben aColors [3] = Culori aColors verde [4] = Albastru aColors [5] = Indigo
Rețineți că aici ați creat un nou matrice care conține 6 variabile String noi pentru utilizare.
Puteți verifica dacă două șiruri se potrivesc utilizând metoda compareTo () a clasei String. Această metodă va reveni la 0 dacă și numai dacă cele două șiruri sunt identice:
String strVowels = "AEIOU"; dacă (strVowels.compareTo ("AEIOU") == 0) // Match string! (Acest cod se va executa) altceva // Corzile nu se potrivesc!
Rețineți că metoda compareTo () se diferențiază între majuscule și minuscule. Considerați că convertiți ambele părți ale comparației dvs. într-un singur caz înainte de a le compara, dacă nu căutați în mod special un caz. Dacă nu vă interesează cauza, puteți folosi metoda compareToIgnoreCase () în locul metodei compareTo ():
String strVowels = "AEIOU"; dacă (strVowels.compareToIgnoreCase ("aeiou") == 0) // String match! (Acest cod se va executa) altceva // Corzile nu se potrivesc!
Uneori doriți să căutați un șir pentru un caracter sau un subrevers. Există multe alte modalități de a efectua potrivirea și căutarea în șir, permițându-vă să construiți metodele de căutare pe care le doriți. De asemenea, puteți căuta anumite caractere sau substringuri folosind metode indexOf () și lastIndexOf (), verificați dacă un șir începe sau se termină cu un substring folosind metodele beginWith () și endsWith (). În cele din urmă, metoda match () acceptă potrivirea expresiei regulate.
Aici folosim metoda conține () pentru a determina dacă există o subdreună specifică:
dacă (strVowels.contains ("IOU") == true) // String conține sub-string IOU!
Dacă nu vă pasă de caz, utilizați în schimb metoda compareToIgnoreCase ():
String strVowels = "AEIOU"; dacă (strVowels. compareToIgnoreCase ("aeiou") == 0) // Match string! (Acest cod se va executa) altceva // Corzile nu se potrivesc!
SFAT: Atunci când implementați funcționalitatea de potrivire și căutarea în aplicațiile dvs., nu uitați să faceți niciun fel de manipulare de șir de preprocesare necesară pentru a elimina problemele de șir de caractere superioare / inferioare / mixte înainte de a căuta. Introducerea de normalizare a utilizatorilor poate fi făcută ca parte a procesului de validare a intrărilor, menținând codul dvs. cât mai simplu și mai ușor de întreținut.
Obiectul String este atât de fundamental pentru Java încât fiecare clasă, datorită derivării din clasa rădăcină numită Object (java.lang.Object), are o metodă toString () pentru a crea o reprezentare șir utilă a valorii lor. Clasele care nu au o reprezentare rezonabilă a șirului, returnează de obicei unele informații de identificare sau de depanare cu privire la tipul de clasă. Cei care au o reprezentare rezonabilă a șirului, cum ar fi un șir de numere dintr-un obiect Integer, returnează reprezentarea textuală a numărului încapsulat. Atunci când este concatenat cu un String, cum ar fi cu operatorul plus (+) descris mai sus, rezultatele metode toString () sunt utilizate în mod implicit. De exemplu:
Integer iNum = Integer nou (123); String sText = "Numărul unu-două-trei ="; String sFullText = sText + iNum; Șirul sFullText2 = sText + iNum.toString ();
Ambele șiruri (sFullText și sFullText2) au aceeași valoare, "Numărul unu-doi-trei = 123". Multe astfel de obiecte pot funcționa și în sens invers. Adică, ei pot parsa o reprezentare String și o pot transforma în tipul nativ reprezentat de obiect. Pentru instace, din nou cu clasa Integer, metoda parseInt () poate fi folosită pentru a obține un nou obiect Integer bazat pe reprezentarea șirului.
După cum ați văzut, șirurile pot fi folosite cu mare efect. Crearea și manipularea șirurilor au totuși unele dezavantaje. Implicarea manipulării șirului poate avea implicații negative asupra performanței pentru aplicația dvs. Este un principiu de bază al designului Java pentru a nu crea obiecte de care nu aveți nevoie. Puteți vedea că manipularea și modificările șirului pot avea ca rezultat o mulțime de variabile String care plutesc în jurul valorii. Iată câteva sfaturi pentru utilizarea șirului bun:
Corzile sunt un tip important de date pe care dezvoltatorii Android îl folosesc pentru a stoca date textuale. Datele de șir, fie că este vorba de o secvență de caractere, de numere, de simboluri sau de o anumită combinație a acestora, pot fi stocate într-o varietate de moduri, dar clasa String este clasa de utilitate primară utilizată în acest scop. Clasa String și clasele de ajutor cum ar fi StringBuilder conțin un set robust de metode de utilizare cu șiruri de caractere, permite ca conținutul lor să fie căutat sau modificat.
Dezvoltatorii mobili Lauren Darcey și Shane Conder au coautorizat mai multe cărți despre dezvoltarea Android: o carte de programare în profunzime intitulată Dezvoltarea aplicațiilor fără fir Android și Sams TeachYourself Dezvoltarea de aplicații Android în 24 de ore. Când nu scriu, își petrec timpul dezvoltând software-ul mobil la compania lor și oferind servicii de consultanță. Acestea pot fi obținute prin e-mail la androidwirelessdev@[email protected], prin intermediul blogului lor la androidbook.blogspot.com, și pe Twitter @ androidwireless.