Impara Java per lo sviluppo Android Nozioni di base sulle stringhe

In questo tutorial, acquisirai familiarità con una delle più importanti strutture di dati di programmazione (tipi) in Java-the String. Le variabili stringa possono essere utilizzate per memorizzare i dati testuali (lettere, numeri, simboli) associati a un programma.

Le applicazioni Android sono scritte in Java, un linguaggio di programmazione. Java ha un numero di tipi di dati primitivi per diversi tipi di numeri (interi, float, ecc.), Valori booleani e singoli caratteri. Oltre alla memorizzazione di dati testuali come matrici o caratteri, Java include anche una potente classe di oggetti chiamata String (java.lang.String), che incapsula ordinatamente i dati testuali e può essere utilizzata per manipolare il contenuto. In questo tutorial imparerai come creare, utilizzare e manipolare le stringhe in diversi modi, incluso come archiviarle come risorse di progetto Android.

Cosa ti serve

Tecnicamente, non hai bisogno di strumenti per completare questo tutorial, ma sicuramente ti serviranno per sviluppare applicazioni Android.

Per sviluppare applicazioni Android (o qualsiasi altra applicazione Java, per quella materia), è necessario un ambiente di sviluppo per scrivere e creare applicazioni. Eclipse è un ambiente di sviluppo molto popolare (IDE) per Java e l'IDE preferito per lo sviluppo Android. È liberamente disponibile per i sistemi operativi Windows, Mac e Linux.

Per le istruzioni complete su come installare Eclipse (incluse le versioni supportate) e l'SDK Android, consultare il sito Web degli sviluppatori Android.

Cos'è una stringa?

Al livello più fondamentale, i programmi Java sono suddivisi in funzionalità e dati. Molti dati leggibili dall'uomo si presentano sotto forma di parole, caratteri, segni di punteggiatura, numeri e così via. Fondamentalmente, tutto ciò che l'utente può digitare su una tastiera. I programmatori chiamano questa memoria di contenuto testuale "dati stringa", ma i dati stessi possono essere archiviati utilizzando una varietà di strutture di dati differenti, a seconda delle esigenze:

  • La classe Java String (java.lang.String) è una classe di utilità per l'archiviazione di dati stringa che non verranno modificati.
  • La classe Java StringBuilder (java.lang.StringBuilder) è una classe di utilità per l'archiviazione di dati stringa che verranno modificati; usato quando la concorrenza non è un problema.
  • La classe Java StringBuffer (java.lang.StringBuffer) è una classe di utilità per l'archiviazione di dati stringa che verranno modificati; usato quando la concorrenza è un problema.
  • Una matrice di variabili di primitive o caratteri (java.lang.Character)
  • Una matrice di variabili di byte primitivi o byte (java.lang.Byte)
  • Varie altre strutture dati e classi di oggetti possono essere utilizzate per memorizzare dati stringa

Come puoi vedere, esistono numerosi modi per archiviare i dati delle stringhe in Java. Ad esempio, le seguenti variabili Java rappresentano una stringa di caratteri vocalici in modi diversi (come byte, caratteri, rappresentazioni Unicode o sotto-stringhe):

 String strVowels = "aeiou"; char astrVowels [] = 'a', 'e', ​​'i', 'o', 'u'; byte abyteVowels [] = 'a', 'e', ​​'i', 'o', 'u'; byte abyteVowelsU [] = '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'; String uVowels = new String ("\ u0061 \ u0065 \ u0069 \ u006F \ u0075"); CharSequence csVowels = (CharSequence) new String ("aeiou"); StringBuffer sbVowels = new StringBuffer ("a" + "e" + "iou"); StringBuilder sVowelBuilder = new StringBuilder (); sVowelBuilder.append ( 'a'); sVowelBuilder.append ( "OEI"); sVowelBuilder.append ( '\ u0075'); 

La classe String è la classe di convenienza utilizzata più spesso, soprattutto dai principianti. Avrai anche bisogno di una comprensione approfondita dell'interfaccia CharSequence (java.lang.CharSequence), poiché viene spesso utilizzata quando si lavora con risorse Android.

Lavorare con la classe String

La classe String è disponibile come parte del pacchetto java.lang, incluso nell'SDK Android che gli sviluppatori possono utilizzare. La documentazione completa per la classe String può essere trovata con la documentazione di Android SDK.

La classe String rappresenta una sequenza immutabile (non modificabile) di caratteri Unicode (codifica a 16 bit), appropriata per l'archiviazione di caratteri in qualsiasi lingua (inglese, tedesco, giapponese e così via).

Quindi cosa c'entra questo con lo sviluppo di Android? Bene, le stringhe vengono utilizzate per archiviare il contenuto visualizzato nelle schermate dell'applicazione o per memorizzare l'input acquisito da un utente. Gli sviluppatori Android caricano, creano e manipolano costantemente i dati di stringa. Diamo un'occhiata ad alcune delle cose che possiamo fare con la classe String.

Creare stringhe

La classe String ha numerosi costruttori, per la creazione e l'istanziazione di variabili stringa. Le variabili stringa possono essere impostate su empty utilizzando la parola chiave null. È anche possibile impostare il suo contenuto da byte, carattere o altri dati String. Ad esempio, ecco alcuni modi per creare variabili String da utilizzare all'interno delle tue applicazioni (alcune sono inizializzate dalle variabili, come uVowels e sVowelBuilder, definite precedentemente in questo tutorial):

 String strVowels1 = "aeiou"; String strVowels2 = new String ("aeiou"); String strVowels3 = new String (sVowelBuilder); String strVowels4 = new String (sbVowels); String strVowels5 = new String (uVowels); String strVowels6 = new String (abyteVowels2); String strVowels7 = new String (abyteVowelsU); String strVowels8 = new String ("a" + "e" + "iou"); String strVowels9 = new String (new char [] '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'); String strVowels10 = new String (nuovo byte [] '\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'); 

Utilizzo di risorse stringa Android

È inoltre possibile caricare stringhe dalle risorse dell'applicazione Android, a condizione che siano state memorizzate correttamente. Ad esempio, è possibile caricare la risorsa stringa per il nome dell'applicazione in una variabile String come indicato di seguito:

 String strAppName = getResources (). GetString (R.string.app_name); 

Ciò richiede che l'applicazione Android in questione contenga una risorsa stringa denominata app_name da qualche parte nella gerarchia di directory / res / values ​​del progetto. Ad esempio, un file denominato /res/values/strings.xml che contiene la seguente definizione stringa XML:

   Il mio nome dell'app Android! 

Iterazione semplice delle stringhe

Ora diamo un'occhiata ad alcune delle cose interessanti che puoi fare agli oggetti String. Innanzitutto, concentriamoci sulle funzionalità disponibili all'interno della stessa classe String.

È utile pensare a una stringa come a una sequenza di caratteri. In quanto tale, a volte vuoi scorrere il suo contenuto, un personaggio alla volta. Ci sono molti modi per farlo, ma un modo semplice è usare un ciclo for (). Puoi sfruttare il metodo String's length () per determinare quanti caratteri hai e il metodo charAt () per recuperare un carattere specifico dal suo indice, proprio come faresti con un indice di array. Per esempio:

 String strVowels = "AEIOU"; per (int i = 0; i < strVowels.length(); i++)  char curChar = strVowels.charAt(i);  

Modifiche alle stringhe: le nozioni di base

Come accennato in precedenza, le variabili String sono immutabili o immutabili. Ciò non vuol dire che non è possibile manipolare il contenuto testuale di una variabile String, ma ogni metodo che lo fa restituisce una nuova variabile String. Alcuni esempi comuni di metodi di classe String che generano nuove variabili String includono:

  • Il metodo concat () viene utilizzato per concatenare o combinare due stringhe in un nuovo oggetto String. Nota: è anche possibile utilizzare l'operatore + per creare un nuovo oggetto String da parti.
  • Il metodo format () consente di creare modelli di stringhe parametrizzati (un argomento più avanzato per discussioni future)
  • I metodi replace () e replaceFirst () vengono utilizzati per sostituire un carattere o sottostringa con un'altra sottostringa. Il metodo replaceAll () supporta la corrispondenza del modello di espressioni regolari.
  • Il metodo split () è utile per rompere una stringa più grande in numerose sottostringhe. Ad esempio, è possibile suddividere un elenco delimitato da virgole in una matrice di oggetti String, uno per ciascun elemento dell'elenco.
  • Il metodo substring () viene utilizzato per estrarre solo parte dell'oggetto String originale.
  • I metodi toUpperCase () e toLowerCase () vengono utilizzati per cambiare il caso String, particolarmente utile per normalizzare le stringhe.
  • Il metodo trim () è usato per hackerare (rimuovere) qualsiasi spazio bianco prima o dopo il contenuto della stringa.

Tieni presente che ognuno di questi metodi assegna a nuovo Istanza di oggetto stringa per memorizzare il risultato. La variabile String originale rimane invariata.

Modifiche alle stringhe: conversione in lettere maiuscole e minuscole

A volte vuoi convertire la tua stringa in maiuscolo o minuscolo. Uno dei motivi per cui potresti voler cambiare il caso di una stringa è quello di normalizzare la stringa per rendere la ricerca o la corrispondenza case-insensitive più facile da implementare.

 String strUpperCaseVersion = strVowels.toUpperCase (); String strLowerCaseVersion = strVowels.toLowerCase (); 

Nota che qui hai creato due nuove variabili String da usare. La variabile String originale, strVowels, rimane invariata.

Modifiche alle stringhe: divisione

A volte si desidera analizzare rapidamente una stringa in sottostringhe. È possibile eseguire questa operazione per estrarre le singole parole da una frase o un elenco delimitato di tag, ecc. È possibile utilizzare semplici espressioni regolari con la funzione split () per questo scopo. Ad esempio, il seguente codice estrae le singole parole (colori) da una stringa:

 String someWords = "Red Orange Yellow Green Blue Indigo"; String aColors [] = someWords.split (""); 

Se dovessi stampare il contenuto dell'array String chiamato aColors, vedresti che:

 aColors [0] = Red aColors [1] = Orange aColors [2] = Yellow aColors [3] = Green aColors [4] = Blue aColors [5] = Indigo 

Si noti che qui è stato creato un nuovo array contenente 6 nuove variabili String da utilizzare.

Semplice corrispondenza delle stringhe

È possibile verificare se due stringhe corrispondono usando il metodo compareTo () della classe String. Questo metodo restituirà 0 se, e solo se, le due stringhe sono identiche:

 String strVowels = "AEIOU"; if (strVowels.compareTo ("AEIOU") == 0) // Le stringhe corrispondono! (Questo codice verrà eseguito) else // Le stringhe non corrispondono!  

Si noti che il metodo compareTo () è sensibile al maiuscolo / minuscolo. Valuta di convertire entrambi i lati del confronto in un caso prima di confrontarli, a meno che tu non stia specificatamente cercando un caso. Se non ti interessa il caso, puoi anche utilizzare il metodo compareToIgnoreCase () invece del metodo compareTo ():

 String strVowels = "AEIOU"; if (strVowels.compareToIgnoreCase ("aeiou") == 0) // Le stringhe corrispondono! (Questo codice verrà eseguito) else // Le stringhe non corrispondono!  

Semplice ricerca di stringhe

A volte si desidera cercare una stringa per un carattere o sottostringa. Esistono molti altri modi per eseguire la corrispondenza e la ricerca di stringhe, consentendo di creare qualsiasi metodo di ricerca desiderato. Puoi anche cercare specifici caratteri o sottostringhe usando i metodi indexOf () e lastIndexOf (), controlla se una stringa inizia o finisce con una sottostringa usando i metodi startsWith () e endsWith (). Infine, il metodo matches () supporta la corrispondenza delle espressioni regolari.

Qui usiamo il metodo contains () per determinare se esiste una sottostringa specifica:

 if (strVowels.contains ("IOU") == true) // La stringa contiene sottostringa IOU!  

Se non ti interessa il caso, usa invece il metodo compareToIgnoreCase ():

 String strVowels = "AEIOU"; if (strVowels. compareToIgnoreCase ("aeiou") == 0) // Le stringhe corrispondono! (Questo codice verrà eseguito) else // Le stringhe non corrispondono!  

SUGGERIMENTO: quando si implementano le funzionalità di ricerca e corrispondenza nelle applicazioni, non dimenticare di eseguire alcuna manipolazione della stringa di pre-elaborazione necessaria per escludere problemi di stringhe maiuscole / minuscole / miste prima della ricerca. La normalizzazione dell'input dell'utente può essere eseguita come parte del processo di convalida dell'input, mantenendo il codice il più semplice e manutenibile possibile.

Stringhe e altri tipi di dati

L'oggetto String è così fondamentale per Java che ogni classe, essendo derivata dalla classe radice chiamata Object (java.lang.Object), ha un metodo toString () per creare una rappresentazione di stringa utile del loro valore. Le classi che non hanno una rappresentazione di stringa ragionevole di solito restituiscono alcune informazioni di identificazione o di debug sul tipo di classe. Quelli che hanno una rappresentazione stringa ragionevole, come una stringa numerica da un oggetto Integer, restituiscono la rappresentazione testuale del numero incapsulato. Quando è concatenato con una stringa, ad esempio con l'operatore più (+) sopra descritto, i risultati del metodo toString () vengono utilizzati per impostazione predefinita. Per esempio:

 Intero iNum = new Integer (123); String sText = "Il numero uno-due-tre ="; String sFullText = sText + iNum; String sFullText2 = sText + iNum.toString (); 

Entrambe le stringhe (sFullText e sFullText2) hanno lo stesso valore, "Il numero uno-due-tre = 123". Molti di questi oggetti possono funzionare anche al contrario. In altre parole, possono analizzare una rappresentazione String e convertirla nel tipo nativo rappresentato dall'oggetto. Per instace, sempre con la classe Integer, è possibile utilizzare il metodo parseInt () per ottenere un nuovo oggetto Integer basato sulla rappresentazione della stringa.

Archi e prestazioni

Come hai visto, le stringhe possono essere utilizzate con grande effetto. Tuttavia, la creazione e la manipolazione di stringhe presentano alcuni inconvenienti. La manipolazione impropria della stringa può avere implicazioni di prestazioni negative per l'applicazione. È un principio di base di Java per non creare oggetti che non ti servono. È possibile vedere che la manipolazione e le modifiche alle stringhe possono determinare il fluttuazione di molte variabili String. Ecco alcuni suggerimenti per un buon utilizzo delle stringhe:

  • Non creare variabili String non necessarie, specialmente quelle temporanee.
  • Utilizzare le classi StringBuilder e StringBuffer per generare il contenuto delle stringhe da zero.
  • Esamina i suggerimenti sul rendimento disponibili sul sito web degli sviluppatori Android.
  • Utilizzare le costanti stringa statiche finali per i valori stringa noti al momento della compilazione.

Avvolgendo

Le stringhe sono un tipo di dati importante che gli sviluppatori di Android utilizzano per memorizzare dati testuali. I dati di stringa, che si tratti di una sequenza di caratteri, numeri, simboli o una combinazione di essi, possono essere memorizzati in vari modi, ma la classe String è la classe di utilità primaria utilizzata per questo scopo. La classe String, e le sue classi helper come StringBuilder, contengono un robusto set di metodi da usare con le stringhe, permettono che i loro contenuti vengano ricercati o modificati.

Riguardo agli Autori

Gli sviluppatori mobili Lauren Darcey e Shane Conder hanno coautore diversi libri sullo sviluppo di Android: un libro di programmazione approfondito intitolato Sviluppo di applicazioni wireless Android e Sams TeachYourself Sviluppo di applicazioni Android in 24 ore. Quando non scrivono, passano il loro tempo a sviluppare software mobile presso la loro azienda ea fornire servizi di consulenza. Possono essere contattati via email a [email protected], tramite il loro blog su androidbook.blogspot.com e su Twitter @androidwireless.

Hai bisogno di più aiuto nella scrittura di app per Android? Consulta i nostri ultimi libri e risorse!