Una stringa è una sequenza di caratteri
Questo tipo di dato è così importante che, in Java, gode di un trattamento speciale pur NON essendo un tipo predefinito!
In Java, una stringa deve essere delimitata da doppi apici:
“Nexus 5”
“” // stringa vuota
Qualunque carattere può comparire in una stringa, utilizzando, se necessario, una sequenza di escape.
Input | Output |
System.out.println(“sopra\nsotto”); |
sopra sotto |
System.out.println(“il file C:\\Documenti\\readme.txt”) | il file C:\Documenti\readme.txt |
System.out.println(“il carattere \u0041 e’ la A in UNICODE”); System.out.println(“il carattere \\u0041 e’ la A in UNICODE”); |
il carattere A e’ la A in UNICODE il carattere \u0041 e’ la A in UNICODE |
Le stringhe sono oggetti della classe String.
Le stringhe però sono oggetti immutabili (possono però essere sovrascritte del tutto). Una volta create il loro contenuto non potrà essere modificato, non avremo a disposizione metodi per modificare tale oggetto, ma solo per leggerlo o per leggerne alcune sue parti;
Abbiamo detto che le stringhe sono un tipo di dato così importante che gode di un trattamento speciale:
– per creare un oggetto di tipo String non abbiamo bisogno di invocare il metodo new (che risulta essere una cosa necessaria per creare un oggetto);
– si possono dichiarare variabili di tipo String e assegnare loro stringhe arbitrarie;
– per stampare stringhe si può ricorrere ai metodi System.out.println(…) e System.out.print(…).
Esempio:
String cognome;
cognome = “Rossi”;
nome = “Marco”;
System.out.print(nome); // non va accapo
System.out.println(cognome);
Output:
La classe String
La classe String definisce molti metodi d’istanza utili.
Lunghezza di una stringa
int lung = hello.length();
System.out.println(lung);
// stampa 13
Estrazione di una sottostringa
Dichiarando una variabile str di tipo String:
restituisce la sottostringa di str a partire dalla posizione start fino a pastEnd – 1.
Attenzione: il primo carattere di una stringa ha posizione 0, e l’ultimo ha posizione str.length()-1.
H | e | l | l | o | , | W | o | r | l | d | ! | carattere | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | posizione |
System.out.println(saluto.substring(7,12));
//stampa World
Concatenazione di stringhe
La concatenazione di due stringhe “Mario” e “Rossi” è la stringa “MarioRossi”.
L’operatore di concatenazione in Java si scrive semplicemente con il simbolo + .
String cognome = “Rossi”;
System.out.println(nome + cognome); //stampa MarioRossi
System.out.println(nome + ” ” + cognome); //stampa Mario Rossi
Cosa succede se si mischiano numeri e stringhe in una espressione?
System.out.println(3 + 4 + 5); //stampa 12
System.out.println(“” + 3 + 4 + 5); //stampa 345
System.out.println(4 + 5 + “pippo”); //stampa 9pippo
La concatenazione è molto utile per ridurre il numero degli enunciati System.out.print(…) .
Per esempio possiamo combinare:
System.out.print(“L’interesse dopo un anno e’: “); //stampa “L’interesse dopo un anno e’: ”
System.out.println(interesse); //stampa “43.9” sulla stessa riga e va a capo
in quest’altro modo:
//stampa: “L’interesse dopo un anno e’: 43.9” con una singola invocazione
Conversione tra numeri e stringhe
Per convertire da numero a stringa possiamo concatenare in numero con la stringa vuota e assegnare il tutto ad una variabile di tipo String.
Invece per convertire da stringa a numero possiamo ricorrere ai metodi Integer.parseInt() o Double.parseDouble() rispettivamente della classe Integer e Double.
int riv = 1789; String riv_string = riv; |
ERRORE |
int riv = 1789; String riv_string = “” + riv; |
OK |
double pi = Double.parseDouble(“3.1415926”); | OK |
int miliardo = Integer.parseInt(“1000000000”); | OK |
Confronto tra stringhe
Ci sono due tipi di confronto tra stringhe:
– controllare se due stringhe hanno le stesse sequenze di caratteri;
– controllare quale delle due stringhe viene prima in ordine lessicografico.
Per questo problema la classe String fornisce i metodi d’istanza necessari: equals e compareTo.
Dichiarando due stringhe s1, s2:
s1.equals(s2); | restituisce true se s1 e s2 sono uguali come sequenze di caratteri,false altrimenti. |
Attenzione: Come per tutti gli oggetti, non usare “==” per confrontare stringhe dato che si possono ottenere risultati inattesi.
Dichiarando due stringhe s1, s2:
s1.compareTo(s2); | restituisce un valore minore di 0 se s1 precede s2 lessicograficamente, un valore maggiore di 0 se s2 precede s1, il valore 0 se sono uguali. |
La stringa vuota
Come avviene per tutte le classi, esiste un valore particolare che può essere associato ad una variabile di tipo String per indicare che quella variabile non riferisce alcun oggetto.
Questo valore, indipendentemente dalla classe, è chiamato null.
Sul valore null non è possibile invocare metodi (si verificherebbe un errore di esecuzione). Per prevenire tali errori, si può testare l’uguaglianza con null usando ==.
Il valore null non deve essere confuso con la stringa vuota “” (quella di lunghezza 0, che non contiene caratteri), che è un oggetto ben definito:
– è possibile invocare metodi su una stringa vuota;
– il confronto di uguaglianza con la stringa vuota deve essere fatto con il metodo equals(…).