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(); }