La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

11/11/01Classe String 1 La classe String Come usare le stringhe.

Presentazioni simili


Presentazione sul tema: "11/11/01Classe String 1 La classe String Come usare le stringhe."— Transcript della presentazione:

1 11/11/01Classe String 1 La classe String Come usare le stringhe

2 11/11/01 Classe String2 La classe String La classe String, sebbene non sia un tipo base, ne presenta diverse caratteristiche In particolare in Java le stringhe hanno le seguenti caratteristiche: 1.String è una classe, e quindi le stringhe sono oggetti e non variabili 2.Esiste una speciale notazione (caratteri tra doppi apici) per le costanti stringa, che rappresenta in realtà una abbreviazione per creare un oggetto stringa il cui contenuto sia noto a priori 3.Le stringhe sono gli unici oggetti che dispongono dell’operatore + (e +=) che permette la concatenazione 4.Il contenuto di un oggetto String non può mai essere modificato 5.Esiste un’altra classe, StringBuffer, che permette di modificare il contenuto di una stringa (usata dal compilatore nelle espressioni di tipo stringa) 6.Una stringa vuota (ma inizializzata) e una stringa nulla (non inizializzata) non sono la stessa cosa

3 11/11/01 Classe String3 Stringa nulla e stringa vuota 1.public class TestString { 2. 3. public static void main( String args[] ) { 4. 5. String s1 = "", s2 = null; 6. System.out.println(s1.length()); 7. System.out.println(s2.length()); 8. } 9. 10.} 0 Exception in thread "main" java.lang.NullPointerException at TestString.main(TestString.java:7) 0 Exception in thread "main" java.lang.NullPointerException at TestString.main(TestString.java:7) Si noti che si può anche scrivere: 1.System.out.println(“ciao”.length()); 4 4 Una String non è un vettore: si può conoscere la lunghezza di una stringa per mezzo del metodo length() (si notino le parentesi)

4 11/11/01 Classe String4 L’operatore + 1.public class TestString { 2. 3. public static void main( String args[] ) { 4. 5. String s; 6. s = "ciao"; 7. s += " mondo"; 8. System.out.println(s); 9. } 10. 11.} ciao mondo

5 11/11/01 Classe String5 String e StringBuffer Cosa accade effettivamente: s“ciao” Viene calcolata l’espressione “ciao” + “ mondo” Il compilatore in realtà usa StringBuffer Il risultato viene quindi riconvertito a String s“ciao mondo” s memorizza un riferimento diverso: la stringa “ciao” è ancora in memoria e non è stata modificata, probabilmente non è nemmeno più utilizzabile int l = s.length()+” mondo”.length; StringBuffer tmp = new StringBuffer(l) tmp.append(s) tmp.append(“ mondo”); s = new String(tmp);

6 11/11/01 Classe String6 Creazione di una stringa String() crea una stringa vuota String(String value) crea una copia della stringa String(char[] value) crea una stringa da un vettore di caratteri String(char[] value, int offset, int count) crea una stringa da una porzione di un vettore di caratteri String(byte[] value) crea una stringa da un vettore di byte String(byte[] value, int offset, int count) crea una stringa da una porzione di un vettore di byte String(StringBuffer) crea una stringa da uno StringBuffer …

7 11/11/01 Classe String7 Costruttori di String 1.public class StringConstructors { 2. public static void main( String args[] ) 3. { 4. char charArray[] = { 'b','i','r','t','h',' ','d','a','y' }; 5. byte byteArray[] = { (byte) 'n', (byte) 'e', (byte) 'w', 6. (byte) ' ', (byte) 'y', (byte) 'e', 7. (byte) 'a', (byte) 'r' }; 8. 9. String s1 = new String( "hello" ), s[] = new String[8]; 10. StringBuffer buffer = new StringBuffer( "Welcome" ); 11. 12. // uso dei costruttori della classe String 13. s[1] = new String(); 14. s[2] = new String( s1 ); 15. s[3] = new String( charArray ); 16. s[4] = new String( charArray, 6, 3 ); 17. s[5] = new String( byteArray, 4, 4 ); 18. s[6] = new String( byteArray ); 19. s[7] = new String( buffer ); 20. 21. for(int i=0; i<s.length; i++) 22. System.out.println("s[" + i + “]=" + s[i] + "!"); 23. } 24.} 25./* (C) Copyright 1999 by Deitel & Associates, Inc. and Prentice Hall. */ s[0]=null! s[1]=! s[2]=hello! s[3]=birth day! s[4]=day! s[5]=year! s[6]=new year! s[7]=Welcome! s[0]=null! s[1]=! s[2]=hello! s[3]=birth day! s[4]=day! s[5]=year! s[6]=new year! s[7]=Welcome!

8 11/11/01 Classe String8 Confronto di stringhe Tutti i caratteri sono rappresentati da codici numerici Quando i computer confrontano stringhe, confrontano i codici numerici Le lettere maiuscole sono perciò diverse dalle lettere minuscole Metodi per il confronto s1.equals( "Ciao" ) Restituisce true se s1 è uguale a "Ciao" s1.equalsIgnoreCase( otherString ) Restituisce true se s1 è uguale a otherString “ciao" è uguale a "CIAO", ma anche a "CiAo“ s1.compareTo( otherString ) restituisce 0 se le due stringhe sono uguali un valore negativo se s1 è minore di otherString un valore positivo se s1 è maggiore di otherString

9 11/11/01 Classe String9 Confronto di stringhe operatore == Restituisce true se due riferimenti puntano alla stessa locazione di memoria Si noti che Java utilizza un solo riferimento di memoria anche per stringhe costanti introdotte in momenti diversi s1 = "hello"; s2 = new String( "hello" ); s1 == "hello"; //true s2 == "hello"; //false

10 11/11/01 Classe String10 Ricerca di stringhe intindexOf(int ch) Restituisce l’indice della prima occorrenza del carattere ch, -1 se non presentenella stringa che invoca il metodo intindexOf(int ch, int fromIndex) Come sopra, ma la ricerca parte dall’indice fromIndex int indexOf(String str) indexOf(String str, int fromIndex) Come sopra, ma viene ricercata una stringa, non un singolo carattere int lastIndexOf(int ch) lastIndexOf(int ch, fromIndex) lastIndexOf(String str) lastIndexOf(String str, fromIndex) Restituisce l’indice dell’ultima occorrenza, -1 se non presente. boolean startsWith(String prefisso) endsWith(String suffisso) Verifica che la stringa inizia/termina con il prefisso/suffisso specificato Metodi di ricerca

11 11/11/01 Classe String11 Ricerca di stringhe 1.public class TestString { 2. 3. public static void main( String args[] ) { 4. String s = "ippopotamo"; 5. System.out.println(s.indexOf("po")); 6. System.out.println("ippopotamo".indexOf("po", 3)); 7. System.out.println(s.indexOf("up")); 8. } 9. 10.} 2 4 2 4

12 11/11/01 Classe String12 Estrazione di stringhe charcharAt(int index) Restituisce il carattere posto all’indice index Stringsubstring(int inizio, int fine) Estrae la stringa dal carattere di indice inizio a fine escluso Stringsubstring(int inizio) Estrae il suffisso della stringa dal carattere di indice inizio Stringtrim() Elimina i whitespace all’inizio e alla fine della stringa Metodi di estrazione 1.public class TestString { 2. 3. public static void main( String args[] ) { 4. System.out.println("ippopotamo".substring(3,5)); 5. System.out.println( 6. "ippopotamo".substring(3,5).charAt(0)); 7. } 8.} op o op o I metodi possono essere concatenati fra loro

13 11/11/01 Classe String13 Eliminazione di doppi spazi 1.public class TestString { 2. 3. public static void main( String args[] ) { 4. String s="A bc def ghi"; 5. System.out.println(s); 6. for(int start=0; (start=s.indexOf(" ", start))>=0;) { 7. System.out.println(start); 8. s = s.substring(0, start) + s.substring(start+1); 9. } 10. System.out.println(s); 11. } 12. 13.} Non ho operazioni di fine ciclo Creo una nuova stringa eliminando il carattere di indice start A bc def ghi 4 8 A bc def ghi 4 8 A bc def ghi Start viene aggiornato ad ogni iterazione

14 11/11/01 Classe String14 Altri metodi public String toLowerCase() ritorna una nuova stringa con i caratteri tutti minuscoli public String toUpperCase() ritorna una nuova stringa con i caratteri tutti maiuscoli … Ed altri ancora Provare a sostituire in un testo un nome (senza distinguere tra maiuscole e minuscole) con lo stesso nome che abbia solo la prima lettera maiuscola Esempio: MARIO, mario, MaRiO  Mario

15 11/11/01 Classe String15 Un semplice esempio di lettura 1./** 2. Il programma legge un file (di al più 1000 byte) 3. e lo memorizza nella stringa s 4. 5. uso: java TestLettura < "nomefile" 6. */ 7.import java.io.*; 8. 9.public class TestLettura { 10. 11.public static void main( String args[] ) throws IOException { 12. byte[] v = new byte[1000]; 13. // legge dal file fino ad un massimo di 1000 byte 14. // restituisce il numero di byte effettivamente letti 15. int length = System.in.read(v); 16. //System.out.println("length="+length); 17. //crea una stringa con i primi length byte del vettore v 18. String s = new String(v, 0, length); 19. System.out.println(s); 20. } 21. 22.}

16 11/11/01 Classe String16 Formattazione di numeri Formattatori numerici: metodi NumberFormat getInstance() restituisce una istanza di formattazione standard void setMaximumIntegerDigits(int num) numero massimo di cifre intere void setMinimumIntegerDigits(int num) numero minimo di cifre intere void setMaximumFractionDigits(int num) numero massimo di cifre decimali void setMinimumFractionDigits(int num) numero minimo di cifre decimali void setMinimumFractionDigits(int num) numero minimo di cifre decimali String format(long num) restituisce un intero formattato String format(double num) restituisce un numero con decimali formattato …

17 11/11/01 Classe String17 Formattazione di numeri 1.import java.text.*; 2.Import java.util.Locale; 3. 4.public class TestFormat { 5. 6.public static void main(String[] args) { 7. // I numeri vengono formattati con le convenzioni italiane 8. NumberFormat nf = NumberFormat.getInstance(Locale.ITALIAN); 9. double d=1.0/3.0; 10. System.out.println(d); 11. System.out.println(nf.format(d)); 12. System.out.println(nf.format(d*10000)); 13. nf.setMaximumFractionDigits(2); 14. System.out.println(nf.format(d)); 15. System.out.println(nf.format(0.3)); 16. nf.setMinimumFractionDigits(3); 17. System.out.println(nf.format(0.3)); 18. nf.setMinimumIntegerDigits(3); 19. System.out.println(nf.format(0.3)); 20. nf.setMinimumFractionDigits(0); 21. System.out.println(nf.format(1)); 22. } 23.} 0.3333333333333333 0,333 3.333,333 0,33 0,3 0,300 000,300 001 0.3333333333333333 0,333 3.333,333 0,33 0,3 0,300 000,300 001

18 11/11/01 Classe String18 Formattazione di numeri 1.import java.text.*; 2. 3.public class TestFormat { 4. 5.public static void main(String[] args) { 6. DecimalFormat nf = new DecimalFormat("0.00#"); 7. System.out.println(nf.format(0.3)); 8. System.out.println(nf.format(-0.3)); 9. System.out.println(nf.format(10000/3.0)); 10. } 11.} 0.30 -0.30 3333.333 0.30 -0.30 3333.333 DecimalFormat(String formato) crea un formattatore secondo una stringa modello: 0 – la cifra deve essere presente # - la cifra può essere presente … … …

19 11/11/01 Classe String19 Formattazione di numeri 1.public class TestFormat { 2. 3.public static void main(String[] args) { 4. System.out.println(format(-0.25, 4, 3)); 5. System.out.println(format(-1.25, 4, 0)); 6.} 7. 8.static String format(double val, int intDigit, int fracDigit) { 9. String ris = String.valueOf(val); 10. String prefix, suffix; 11. int point = ris.indexOf('.'), i; 12. if(point<0) { 13. prefix = ris; 14. suffix = ""; 15. } else { 16. prefix = ris.substring(0, point); 17. suffix = ris.substring(point+1); 18. } 19. for(i=prefix.length(); i<intDigit; i++) prefix = ' '+prefix; 20. for(i=suffix.length(); i<fracDigit; i++) suffix += '0'; 21. if(fracDigit>0) return prefix+'.'+suffix.substring(0, fracDigit); 22. else return prefix; 23.} 24.} -0.250 -0.250 È un metodo statico di String che restituisce una rappresentazione in stringa del parametro


Scaricare ppt "11/11/01Classe String 1 La classe String Come usare le stringhe."

Presentazioni simili


Annunci Google