LE STRINGHE IN JAVA:
In java le stringhe sono degli oggetti, a differenza del C.
I caratteri in Java sono in formato UNICODE a 16 bit, non ASCII a 8bit.
Per dichiarare una stringa si fa in questo modo:
String stringhetta = "Bau Bau";
Le stringhe String non possono essere cambiate dopo la loro creazione (oggetti immutabili).
La classe String ha molti metodi, vediamone alcuni:
tipologia
selezione
confronto
sintassi
char charAt(int index);
semantica
Restituisce il carattere all'indice
specificato. 0 = primo carattere,
lenght()-1 = ultimo.
String substring(int beginIndex)
Restituisce la sottostringa di this
partendo dall’indice beginIndex.
Compara due stringhe; -1 se la stringa
this precede alfanumericamente il
parametro, 0 se sono uguali, +1 se la
stringa this succede alfanumericamente il
parametro.
Confronta la stringa this con un'altra.
Ritorna true se sono uguali false
altrimenti. E' case sensitive, ossia Pippo e
PiPpO sono diversi.
Restituisce la lunghezza della stringa
this.
Concatena la stringa parametro alla fine
di this string.
Concatena le due stringhe
Ritorna l’indice della stringa this della
prima occorrenza del carattere ch.
Ritorna l’indice della stringa this,
partendo da fromIndex, della prima
occorrenza del carattere ch.
Ritorna l’indice della stringa this della
prima occorrenza della striga s.
Ritorna l’indice della stringa this,
partendo da fromIndex, della prima
occorrenza della stringa s.
Ritorna l’indice della stringa this
dell’ultima occorrenza del carattere ch.
Ritorna l’indice della stringa this
dell’ultima occorrenza della stringa s.
Converte la stringa this in soli caratteri
minuscoli.
int compareTo(String anotherString);
boolean equals(String anotherString);
int length();
concatenazione
String concat(String anotherString);
ricerca
String + String
int indexOf(int ch);
int indexOf(int ch, int fromIndex);
int indexOf(String s);
int indexOf(String s, int fromIndex);
int lastIndexOf(int ch);
int lastIndexOf(String s);
conversione
String toLowerCase();
String toUpperCase();
Converte la stringa this in soli caratteri
maiuscoli
String trim();
Toglie dalla stringa this spazi all’inizio e
alla fine.
trasforma in stringa il parametro d di
qualsiasi tipo.
Sostituisce tutti i caratteri oldChar della
stringa this con newChar.
static String valueOf(tipo d);
sostituzione
String replace (char oldChar, char
newChar);
Vediamo un esempio.
import java.io.*;
import java.lang.*;
// Include le funzioni I/O standard di base.
// Per usare i metodi sulle stringhe.
class Jlez22STRINGHE {
public static void main(String args[])
{
System.out.println("Scrivi una stringa di testo:");
String stringhina1 = leggiStr();
// Leggo una stinga da tastiera.
System.out.println("Scrivine un'altra:");
String stringhina2 = leggiStr();
// Leggo una stinga da tastiera.
// Stampiamo le stringhe normalmente
System.out.println("\nLa prima stringa e' " + stringhina1);
System.out.println("La seconda stringa e' " + stringhina2);
// Diamo altre informazioni usando length() e charAt(int).
System.out.print("La stringa 1 inizia
System.out.println(", ed e' lunga " +
System.out.print("La stringa 2 inizia
System.out.println(", ed e' lunga " +
con " + stringhina1.charAt(0));
stringhina1.length() + " caratteri");
con " + stringhina2.charAt(0));
stringhina2.length() + " caratteri");
// Controlliamo se le due stringhe sono uguali con equals(String).
if (stringhina1.equals(stringhina2))
System.out.println("Le stringhe sono uguali");
else System.out.println("Le stringhe sono diverse");
// Stampiamo le stringhe con i caratteri convertiti tutti in maiuscolo, con toUpperCase(), e tutti in
minuscolo, con toLowerCase()
System.out.println("Stringa 1 uppercase: " + stringhina1.toUpperCase());
System.out.println("Stringa 2 lowercase: " + stringhina2.toLowerCase());
// Stampiamo la stringa1 invertita
System.out.println("Stringa 1 invertita: " + invertiStr(stringhina1));
}
// Fine del metodo principale Main()
// Definiamo un metodo chiamato leggiStr(), che in entrata non ha parametri, e in uscita restituisce una
stringa immessa da tastiera:
public static String leggiStr()
{
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(input);
try {
String stringa = tastiera.readLine();
return stringa;
}
catch (Exception e) {
System.out.println("Errore: " + e + " nella lettura da tastiera");
System.exit(0);
return("errore");
}
}
// Fine di "String leggiStr()"
// Definiamo un metodo chiamato invertiStr(String s), che inverte una stringa s passata come parametro:
public static String invertiStr(String s) {
return (s.length()<2) ? s : invertiStr(s.substring(1)) + s.charAt(0);
}
// Fine di “String invertiStr(String s)”
}
// Fine della classe Jlez22STRINGHE
LE STRINGBUFFER IN JAVA:
Una notevole limitazione delle stringhe della classe String è che sono oggetti immutabili, non possono
essere modificati (non esistono metodi che modificano la stringa this. Per aumentare sensibilmente
l’efficienza è utile prendere in considerazione la classe java.lang.StringBuffer che permette la modifica
della stringa this. Tale classe mette a disposizione una serie di importanti metodi di modifica tra cui:
tipologia
modifica
sintassi
append(tipo d)
insert(int ind, tipo d)
delete(int inizio, int fine)
deleteCharAt(int k)
replace(int inizio, int fine, String s)
reverse()
setCharAt(int k, char c)
setLength(int lung)
conversione String toString()
semantica
Concatena in fondo alla stringa this una
rappresentazione a stringa del dato d.
Inserisce dall’indice ind una rappresentazione a
stringa del dato d.
Cancella i caratteri da inizio a fine-1.
Cancella il carattere di indice k
Cancella i caratteri da inizio a fine ed inserisci s
da inizio.
Inverte la stringa
Sostituisce il k-esimo carattere con il carattere c.
Imposta a lung la nuova lunghezza
Trasforma in tipo String la StringBuffer this
Un esempio di utilizzo delle StrigBuffer è la trasformazione del metodo invertiStr() precedente in una
versione meno elegante ma più efficiente:
import java.lang.StringBuffer;
public static String invertiStrEff(String s) {
StringBuffer h = new StringBuffer(s);
int primo=0;
int ultimo=s.length()-1;
char temp;
while (primo<ultimo) {
temp=h.charAt(primo);
h.setCharAt(primo,h.charAt(ultimo));
h.setCharAt(ultimo,temp);
primo++;
ultimo--;
}
return h.toString();
}