Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010 1 Le stringhe Una stringa è una sequenza di caratteri (lettere, cifre, segni di punteggiatura, etc.). In Java non esiste un tipo primitivo che rappresenti le stringhe (il tipo primitivo char rappresenta infatti i singoli caratteri e non le stringhe). Esiste però un tipo NON primitivo che consente di manipolare le stringhe il tipo String. In Java è possibile dichiarare una variabile di tipo String e assegnarle una stringa di caratteri. Ad esempio, nel frammento di codice della successiva slide, si dichiara una variabile String che si chiama frase e le si assegna la stringa “Hello world!”: 2 Le stringhe String frase; frase=“Hello world!”; System.out.println(frase); L’esecuzione di questo codice stampa: Hello world! 3 Letterali stringa e carattere Letterale stringa sequenza di caratteri racchiusa tra doppi apici esempio: “Hello world!” è un letterale stringa composto da 12 caratteri Letterale carattere carattere appartenente al codice Unicode racchiuso tra singoli apici esempio: ‘a’ è un letterale carattere Attenzione! La scrittura ‘a’ denota un singolo carattere, mentre la scrittura “a” denota una stringa composta di un singolo carattere 4 La dichiarazione In Java la dichiarazione con inizializzazione di una stringa ha la seguente sintassi: String <string_id>=<string_value>; Esempio: Identificatore (o nome) della stringa String isString=“Hello!”; Questa dichiarazione costruisce una variabile di tipo String e la inizializza con la stringa di sei caratteri “Hello!” 5 String vs char Attenzione! Una variabile di tipo (primitivo) char può contenere un unico carattere, mentre una variabile di tipo (non primitivo) String può contenere una sequenza di caratteri. Il valore è racchiuso tra doppi apici (“) per la variabile di tipo String e tra singoli apici (‘) per la variabile di tipo char. Ad esempio: char carattere; carattere=‘d’; //Singolo carattere String stringa, carStringa; stringa=“programmazione”; //Stringa carStringa=“d”; //Stringa di un solo carattere carattere=“d”; //Assegnamento errato!! carString=‘d’; //Assegnamento errato!! 6 Organizzazione di String Si riconsideri il codice: String frase; frase=“Hello world!”; Ogni carattere ha una ben precisa posizione all’interno della stringa: H e l l o w o r l d ! 0 1 2 3 4 5 6 7 8 9 10 11 ‘H’ è in posizione 0, ‘e’ in posizione 1, ‘l’ in posizione 2, …, fino ad arrivare a ‘d’ in posizione 10 e a ‘!’ in posizione 11 (ultima posizione)... 7 Organizzazione di String … Ad esempio il 3° carattere è quello in posizione 2 (‘l’). Più in generale il carattere n° di una stringa è il carattere in posizione (n-1). La lunghezza L di una stringa è data dal numero di caratteri che contiene. In questo caso si ha L=12 (cioè 11+1, ovvero posizione dell’ultimo carattere ‘!’ incrementata di 1) 8 Concatenazione di stringhe La concatenazione di stringhe avviene tramite l’operatore +. Ad esempio il codice seguente: String str1=“Questa è una ”; String str2=“concatenazione ”; String str3=“di tre stringhe”; String str4; str4=str1+str2+str3; System.out.println(str4); produce la stampa: Questa è una concatenazione di tre stringhe 9 Manipolazione di stringhe Il tipo String, dal momento che NON è primitivo e ha una struttura interna complessa, mette a disposizione alcuni metodi (o procedure) per la manipolazione delle stringhe. Data una variabile String identificata dal nome <string_id>, si può invocare un suo metodo identificato dal nome <method>, tramite la seguente sintassi: <string_id>.<method>(<params>); dove <params> è la lista degli argomenti che il metodo <method> riceve in ingresso 10 Manipolazione di stringhe … Ad esempio il seguente codice dichiara una variabile String e usa il suo metodo length per ottenerne la lunghezza: String str; str=“Hello world!”; int lunghezza; lunghezza=str.length(); System.out.println(lunghezza); Il metodo length restituisce la lunghezza della stringa di caratteri contenuta nella variabile che lo invoca (in questo caso la variabile str) e non ha argomenti in ingresso. 11 Manipolazione di stringhe Nel seguito vediamo i metodi del tipo String che servono per: calcolare la lunghezza di una stringa (già visto…) ottenere il carattere in una data posizione confrontare due stringhe convertire una stringa in caratteri minuscoli convertire una stringa in caratteri maiuscoli 12 Il metodo length Descrizione: restituisce il numero di caratteri della stringa che invoca il metodo Tipo restituito: int Sintassi: <string_id>.length(); Esempio: String str=“Hello world!”; int lunghezza; lunghezza=str.length(); System.out.println(lunghezza); Questo frammento di codice stampa la lunghezza della stringa 12 13 Il metodo charAt Descrizione: restituisce il carattere in una specificata posizione (valore intero) Tipo restituito: char Sintassi: <string_id>.charAt(<position>); Esempio: String str=“Hello world!”; char carattere; carattere=str.charAt(2); System.out.println(carattere); Questo frammento di codice stampa il carattere nella posizione di indice 2 (cioè il terzo carattere) ‘l’ 14 Il metodo equals Descrizione: confronta la stringa che invoca il metodo con una stringa passata come argomento e restituisce true se le due stringhe sono uguali, altrimenti false Tipo restituito: boolean Sintassi: <string_id>.equals(<cfr_string_id>); Esempio: String str1=“Hello world!”, str2=“Hello!”; boolean test; Questo frammento di codice test=str1.equals(str2); confronta due stringhe e System.out.println(test); restituisce false 15 Il metodo equalsIgnoreCase Descrizione: confronta la stringa che invoca il metodo con una stringa passata come argomento e restituisce true se le due stringhe sono uguali, altrimenti false (ignorando minuscole e maiuscole) Tipo restituito: boolean Sintassi: <string_id>.equalsIgnoreCase(<cfr_string_id>); Esempio: String str1=“Hello!”, str2=“hello!”; boolean test; Questo frammento di codice due stringhe (ignorando test=str1.equalsIgnoreCase(str2); confronta maiuscole e minuscole) e restituisce true 16 System.out.println(test); Il metodo toLowerCase Descrizione: restituisce la stringa che invoca il metodo trasformata in minuscolo Tipo restituito: String Sintassi: <string_id>.toLowerCase(); Esempio: String str1=“HELLO!”, str2; str2=str1.toLowerCase(); System.out.println(str2); Questo frammento di codice stampa la stringa “hello!” 17 Il metodo toUpperCase Descrizione: restituisce la stringa che invoca il metodo trasformata in maiuscolo Tipo restituito: String Sintassi: <string_id>.toUpperCase(); Esempio: String str1=“hello!”, str2; str2=str1.toUpperCase(); System.out.println(str2); Questo frammento di codice stampa la stringa “HELLO!” 18