Seleziona una pagina

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:

“Hello World!”
“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 nome = “Matteo”;
String cognome;
cognome = “Rossi”;
nome = “Marco”;

System.out.print(nome); // non va accapo
System.out.println(cognome);

Output:

Marco Rossi
La classe String

La classe String definisce molti metodi d’istanza utili.

Lunghezza di una stringa
String hello = “Hello, World!”;
int lung = hello.length();
System.out.println(lung);
// stampa 13
Estrazione di una sottostringa

Dichiarando una variabile str di tipo String:

str.substring(start, pastEnd)

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
String saluto = “Hello, World!”;
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 nome = “Mario”;
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(“Rai” + 3); //stampa Rai3
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:

double interesse = 43.9;
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:

System.out.println(“L’interesse dopo un anno e’: ” + interesse);
//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(…).

Cosa ne pensate?

In caso di dubbi o consigli lasciate un commento!
Grazie per l’attenzione.