LE STRINGHE IN JAVA
In Java è una sequenza finita di caratteri (alfabeto Unicode) da attribuire al tipo String. Il tipo String è una classe e non un tipo primitivo. Quindi ogni stringa in Java è un oggetto. Per questo motivo, a differenza di altri linguaggi, posso effettuare operazioni sulle stringhe mediante i metodi della classe String.
Il valore assegnato a un oggetto stringa va racchiuso tra doppi apici :
“Ciao”
per dichiarare una variabile stringa ho due modi, il primo equivale a quello dei tipi primitivi :
String saluto; //variabile di tipo String con contenuto nullo, perché questo è quello che accade a oggetti non inizializzati.
String saluto = “Ciao”; // la variabile viene inizializzata, le virgolette sono solo il contenitore
per dichiarare un oggetto, posso usare il modo usato con le classi (String è una classe particolare)
saluto =new String(“Ciao”);
Vediamo alcuni metodi della classe String :
length()
restituisce un numero intero corrispondente al numero di caratteri della stringa. Ecco come si usa :
saluto.length(); //con il valore sopra da come valore 4
“buongiorno”.length(); // risponderà con un 10
“”.length(); // restituisce uno 0, cioè una stringa vuota
charAt(int pos)
restituisce il carattere della stringa corrispondente alla posizione passata
String saluto = “Ciao”;
saluto.charAt(3); // restituisce 'o', infatti il primo carattere è nella posizione 0
nota – il numero passato va da 0 a length()-1.
concat(String nomestringa)
crea una nuova stringa frutto dell'unione, a destra della stringa principale, la stringa passata. Ecco alcuni esempi
String var1, var2, var3;
var1=“Buon”;
var2=” Natale”;
var3=var1.concat(var2); // var3 è una nuova stringa uguale a “Buon Natale”
nota – la concatenazione si ottiene anche con l'uso dell'operatore +
substring(int inizio)
crea una nuova stringa. Questa contiene i caratteri dalla posizione passata (inclusa) della stringa su cui si applica all'ultimo carattere. Un esempio
String var1, var2;
var1=”Buon Natale”;
var2=var1.substring(5); // var2 conterrà “Natale”
substring(int inizio, int fine)
crea una nuova stringa. Questa contiene i caratteri della stringa dalla posizione passata nel primo valore fino alla posizione (esclusa) definita dal secondo valore passato. Un esempio
String var1, var2;
var1=”Buon Natale”;
var2=var1.substring(5,8); // var2 conterrà “Nat”
indexOf(char carattere)
verifica se la stringa su cui si lavora contiene il carattere passato. Come risposta, se lo trova indica la posizione, se ne trova più di uno fornisce lo stesso risultato, cioè la posizione del primo carattere trovato. Se non lo trova restituisce -1. Alcuni esempi
“Buon Natale”.indexOf('N'); // restituisce 5
var1=”Buon Natale”;
var1.indexOf('a '); // restituisce del primo 'a' trovato, cioè 6
var1.indexOf('v'); // restituisce -1
indexOf(String “stringa”)
verifica se la stringa passata è contenuta nella stringa su cui si lavora. Se la trova restituisce la posizione in cui parte, altrimenti restituisce -1. Qualche esempio
var1=”Buon Natale”;
var1.indexOf(“tale”); // restituisce 7
var1.indexOf(“Buo”); // restituisce 0
var1.indexOf(“pippo”); // restituisce -1
lastIndexOf(String “stringa”)
verifica se la stringa analizzata contiene la stringa passata e da che posizione parte, se ce ne sono più di una segnala l'ultima. Vediamo un esempio
var1=”mamma”;
var1.lastIndexOf(“ma”); // restituisce 3 perché considera l'ultimo e non il primo come nel metodo precedente
lastIndexOf(char 'carattere');
verifica se la stringa analizzata contiene il carattere passato e ne restituisce la posizione. Se appare più volte viene restituita la posizione dell'ultima coincidenza trovata.
var1=”mamma”;
var1.lastIndexOf('m'); // restituisce 3 perché considera l'ultimo
valueOf(valore)
compareTo(String)
fa il confronto tra due stringhe. Se la prima è minore (confronto con valore numerico dei caratteri del codice unicode) ritorna un numero negativo, se sono uguali ritorna 0 e se la prima stringa è maggiore ritorna un valore positivo. Un esempio
var1 = “abc”;
var2 = “def”;
int pippo = var1.compareTo(var2); // ritorna un valore negativo
equals(String)
controlla se le due stringhe sono identiche.
Se scriviamo le seguenti istruzioni :
String var1 = “pippo”;
….
….
String var2 =”pippo”;
il sistema Java punta per entrambe le variabili alla stessa locazione che contiene “pippo”, in questo modo risparmia spazio nella memoria. Quindi se scrivo :
var1 == var2
il risultato è true. Il motivo che entrambe contengono la stessa locazione di memoria che permette di risalire al valore a loro assegnato. Se il valore viene inserito da tastiera o con la parola chiave new la cosa cambia. Infatti nelle istruzioni successive :
String var1=new String(“pluto”);
String var2=new String(“pluto”);
il sistema assegna alle due variabili locazioni diverse, quindi non è possibile confrontare le due variabili con l'operatore di uguaglianza “==”. Per vedere se due stringhe sono uguali devo usare il metodo equals() . Vediamo un esempio sfruttando le ultime due istruzioni :
…
var1.equals(var2); // restituisce in questo caso true
…
esiste anche un metodo equivalente che permette di usare intern() :
…
var1.intern()==var2.intern();
…
un metodo equivalente ma che non tiene conto del case (cioè tratta le minuscole e le maiuscole allo stesso modo)
var1=”PIPPO”;
var2=”pippo”;
var1.equalsIgnoreCase(var2); // restituisce true
var1.equals(var2); // restituisce false
toUpperCase()
permette di riscrivere la stringa con caratteri solo maiuscoli. La stringa originale rimane invariata.
toLowerCase()
permette di riscrivere la stringa con caratteri solo minuscoli. La stringa originale rimane invariata.
E' possibile convertire una variabile di un tipo primitivo in una variabile String
valueOf
esempio
int pippo = 25;
Integer.toString(pippo);
E' possibile convertire una variabile String in una variabile di tipo primitivo (numerico!!!)
Boolean.parseBoolean(String);
Byte.parseByte(String, int base);
Short.parseShort(String, int base);
Integer.parseInt(String, int base);
Long.parseLong(String, int base);
Float.parseFloat(String);
Double.parseDouble(String);
esempio
String pippo = “25”;
Integer.parseInt(pippo); //converte la stringa pippo in un numero intero 25
Integer.parseInt(pippo, 16); // come sopra ma il valore è espresso in esadecimale