Stringhe

Stringa = sequenza di caratteri

In Java, una stringa deve essere delimitata da doppi apici:
 
 
"Hello World!"
"54 e' piu' grande di 78"
""                     // stringa uuota

Qualunque carattere può comparire in una stringa, utilizzando, se necessario, una sequenza di escape.
 

 
System.out.println("Ha detto \"S í\"!!")
 
Ha detto "Sí"!!

System.out.println("sopra\nsotto")
 

sopra
sotto
System.out.println("il file C:\\Documenti\\readme.txt")
 
il file C:\Documenti\readme.txt



Le stringhe sono oggetti!

Le stringhe sono oggetti della classe String. Si possono dichiarare variabili di classe String e assegnarci stringhe arbitrarie.
Per stampare stringhe:  System.out.println e System.out.print
 
 
String nome = "Carlo";
String cognome;
cognome = "Rossi";
nome = "Paolo  ";

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

Paolo  Rossi



La classe String

La classe String definisce molti metodi utili
 
String hello = "Hello, World!";
int lung = hello.length();
System.out.println(lung); // stampa 13

Estrazione di una sottostringa:
 
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.

String saluto = "Hello, World!";
System.out.println(hello.substring(7,12); // stampa "World"




Concatenazione

La concatenazione di due stringhe "Andrea" e "Bocelli" è la stringa "AndreaBocelli".
L'operatore di concatenazione in Java è '+'.
 
String nome = "Andrea";
String cognome = "Bocelli";
System.out.println(nome + cognome); //stampa AndreaBocelli
System.out.println(nome + " " + cognome); 
                                 //stampa Andrea Bocelli

L'operatore '+' è sovraccaricato (overloaded): può essere applicato sia a numeri che a stringhe.

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

Documentazione della classe String [locale, Medialab, Sun].




Confronto tra stringhe

Due tipi di confronti tra due stringhe:
  1. sono uguali? 
  2. quale stringa viene prima in ordine lessicografico?
La classe String fornisce i metodi necessari: equals e compareTo
  • s1.equals(s2) restituisce true se s1 e s2 sono uguali, false altrimenti. 
  • s1.compareTo(s2) è un valore minore di 0 se s1 precede s2 lessicograficamente, maggiore di 0 se s2 precede s1, e vale 0 se sono uguali.
String s1 = "Ciao";
String s2 = console.readLine();
boolean b = s1.equals(s2); 
Input: Ciao
b vale true
b = "cargo".compareTo("cathode") < 0; b vale  true



Attenzione:   Non usare "==" per confrontare stringhe: può dare risultati inattesi.
 
String s1 = "Ciao";
String s2 = "Ciao"; 
boolean b = (s1 == s2); 
b  vale  true
String s1 = "Ciao";
String s2 = console.readLine();
boolean b = (s1 == s2); 
Input: Ciao
b  vale  false!!!



Conversione tra numeri e stringhe

Da numero a stringa: concatenazione con la stringa vuota

De stringa a numero: metodi Integer.parseInt() o Double.parseDouble()
 
 
int riv = 1789;
String riv_string = riv; // incompatible types
                         // found   : int
                         // required: java.lang.String

String riv_string = "" + riv;    // OK

double pi = "3.1415926"; // incompatible types
                         // found   : java.lang.String
                         // required: double

double pi = Double.parseDouble("3.1415926"); // OK