SlideShare una empresa de Scribd logo
1 de 30
Caratteri e Stringhe Unità didattica 4 Enrico Giunchiglia Gabriele Palma Fondamenti di Informatica
Carat t er i ,[object Object],[object Object],[object Object],[object Object],[object Object]
Tabella  ASCII  (standard) Il carattere  'O'   ha codice   79  ( riga   70  + col onna   9  =  79 ). O 9 70
Gestione di caratteri D ichiarazione ed inizializzazione char ch1;  char ch2 =  ' X ' ; Conversione  tra  int   e   char . uscitaDati.print( “ Codice  ASCII  di  X:  &quot; ); uscitaDati.printLine((int)  ' X '  ); uscitaDati.print(&quot; Codice  ASCII 88: &quot;); uscitaDati.printLine((char) 88 ); true perchè il codice  ASCII  di   'A'   è   65   e il codice di   'c'   è   99 . ' A '  <  ' c '
String he ,[object Object],[object Object],[object Object],[object Object],OutputBox uscitaDati = new OutputBox(...); uscitaDati.print( “Un messaggio“ );
Le stringhe sono  o ggetti in Java ,[object Object],[object Object],[object Object],String nome1; nome1 = new String(  &quot; Latte “  ); String nome1; nome1 = “Latte“; Queste istruzioni sono equivalenti .
Acce sso ai caratteri di una stringa ,[object Object],0 1 2 3 4 5 6 S u m a t r a String nome = “Sumatra“; char inNome = nome.charAt(3); nome Questa variabile si riferisce a tutta la stringa. nome.charAt( 3 ) Il metodo ritorna il carattere alla posizione 3.
Lunghezza di una stringa ,[object Object],str3   non corrisponde ad alcun oggetto.   String nome = “Sumatra“, str1 = “one“, str2 = ““, str3; nome.length( ); str1.length( ); str2.length( ); str3.length( ); 7 3 0 Error e !
Concatenazione di stringhe ,[object Object],[object Object],[object Object]
E sempio : cont eggio   di v o cali Queste istruzioni contano il numero di vocali nella stringa in ingresso (nome). String  nome = richiestaDati.getString(&quot; Nome ?&quot;); int numeroVocali = 0; for (int i = 0; i < nome.length(); i++) { char letter = nome.charAt(i); if (letter == 'a' || letter == 'A' || letter == 'e' || letter == 'E' || letter == 'i' || letter == 'I' || letter == 'o' || letter == 'O' || letter == 'u' || letter == 'U' ) { numeroVocali++; } } uscitaDati.print( &quot; il tuo nome ha  &quot; +   numeroVocali + &quot;  vocali &quot;);
E sempio : co nteggio di parole (1) String frase = richiestaDati.getString(“ Dammi una frase :&quot;); int nc = frase.length(); int indice = 0, numeroParole = 0; while (indice < nc) { // ignor a gli spazi bianchi while (frase.charAt(indice) == ' ') { indice++; } //  trova la fine della parola while (frase.charAt(indice) != ' ') { indice++; } //  un’altra parola trovata, incremento del contatore numeroParole++;  } Problem a :  Il ciclo più interno potrebbe assegnare ad  indice   un valore che eccede il massimo consentito (nc)
E sempio : cont eggio di parole  (2)  String frase = richiestaDati.getString(“ Dammi una frase :&quot;); int nc = frase.length(); int indice = 0, numeroParole = 0; while (indice < nc) { // ignor a gli spazi bianchi while ((indice < nc) && (frase.charAt(indice) == ' ')) { indice++; } //  trova la fine della parola while ((indice < nc) && (frase.charAt(indice) != ' ')) { indice++; } //  un’altra parola trovata, incremento del contatore numeroParole++;  } Problem a :  numeroParole  è maggiore di uno rispetto al conteggio corretto se la frase finisce con uno o più spazi.
Uguaglianza fra stringhe ,[object Object],[object Object],[object Object],[object Object],String x =  &quot;Alfa&quot;,  y =  &quot;alfa&quot;, z = &quot;beta&quot;; boolean r; int c; r = x.equals(y);  // r == false  r = x.equalsIgnoreCase(y); // r == true  c = y.compareTo(z);  // c < 0  c = x.compareTo(y);  // c < 0
E sempio :  confronto tra oggetti String   int  javaNum = 0; boolean ripeti = true; String  parola; while ( ripeti ) { parola = inDati.getString(“ Prossima parola :&quot;); if ( parola.equals(&quot;STOP&quot;) )  { ripeti = false; }   else if ( parola.equalsIgnoreCase(“Java&quot;) ) { javaNum++; } } Continu a a leggere le parole   e conta quante volte la parola  Java   appare nel testo in ingresso.
Uguaglianza  (==) vs. equals  (1) word1 == word2 word1.equals( word2 ) word1   e   word2  p untano allo stesso oggetto. word1 word2 String Java true true
Uguaglianza  (==) vs. equals  (2) word1 word2 word1 == word2 word1.equals( word2 ) word1   e   word2  p untano ad oggetti diversi con uguale contenuto. String Java true false String Java
Uguaglianza  (==) vs. equals  (3) word1 word2 word1 == word2 word1.equals( word2 ) word1   e   word 2  p untano ad oggetti diversi con diversi contenuti. String Java false false String Bali
Altri metodi della classe St ring Me todo Significato substring x.substring(n,m)  restituisce una stringa corrispondente alla porzione di x dalla posizione n alla posizione m String s = “Viva Java!”; String t = substring(1,3); // contiene “iva” trim x.trim()  restituisce una stringa con lo stesso contenuto di x privato di eventuali spazi all’inizio e alla fine startsWith x.startsWith(y)  restituisce true se x comincia con y String s = “Viva Java!”, t = “Viva”; boolean r = s.startsWith(t);  endsWith x.endsWith(y)  restituisce true se x termina con y String s = “Viva Java!”, t = “Java!”; boolean r = s.endsWith(t);   indexOf x.indexOf(c)  restituisce la posizione di c in x e  x.indexOf(c,n)  restituisce la posizione di c in x cominciando la ricerca dalla posizione n; entrambe restituiscono –1 se c non è presente in x (c di tipo char)
Classe StringBuffer ,[object Object],[object Object],[object Object],[object Object]
Metodi di StringBuffer Me todo Significato charAt x.charAt(n)  restituisce il carattere in posizione n (analogo alla classe String) length x.length()  restituisce il numeo di caratteri in x (analogo alla classe String) setCharAt x.setCharAt(n, c)  imposta il carattere in posizione n al valore c (c è di tipo char) deleteCharAt x.deleteCharAt(n)  cancella il carattere in posizione n append x.append(y)  concatena a x il contenuto di y reverse x.reverse()  rovescia il contenuto di x insert x.insert(n,y)  inserisce y all’interno di x a partire dalla posizione n delete x.delete(n,m)  cancella dalla posizione n alla posizione m toString y = x.toString()  restituisce il contenuto di x sotto forma di String (y è un oggetto String)
Utilizzo di  StringBuffer (1) Rimpiazza tutte le vocali dell’oggetto frase con  ' X ' String  frase = richiestaDati.getString(“ Frase :&quot;); StringBuffer temp = new StringBuffer(frase); for (int i = 0; i < temp.length(); i++) { char c = temp.charAt(i); if ( c == 'a' || c == 'A' || c == 'e' || c == 'E' ||   c == 'i' || c == 'I' || c == 'o' || c == 'O' ||   c == 'u' || c == 'U'  ) { temp.setCharAt(i, 'X'); } } uscitaDati.print(temp);
Utilizzo di  StringBuffer (2) Costruisce una frase con le sole parole di lunghezza pari String parola; StringBuffer temp = new StringBuffer(&quot;&quot;); boolean ripeti = true; while ( ripeti ) { parola = inDati.getString(“ Prossima parola :&quot;); if ( parola.equals(&quot;STOP&quot;) ) { ripeti = false; } else if ( parola.length() % 2 == 0 ) { temp.append(parola + &quot; &quot;); } } Aggiunge la parola e uno spazio a   tempStringBuffer .
StringBuffer vs. String ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Conversione da String a tipi primitivi (1) ,[object Object],[object Object],[object Object],[object Object]
Conversione da String a tipi primitivi (2)  ,[object Object],[object Object],[object Object],[object Object]
Classe ResponseBox (javabook) ,[object Object],MainWindow  finestra = new MainWindow( ); ResponseBox  yesNoBox    = new ResponseBox( finestra ); yesNoBox.prompt( “Do you love Java?”);
Gestire la selezione con ResponseBox int selection = yesNoBox.prompt(“ Premi un  b o tton e &quot;); switch (selection) { case ResponseBox.YES:  messageBox.show(“ Hai premuto  Yes&quot;); break; case ResponseBox.NO: messageBox.show(“ Hai premuto No “); break; }
Esempio di utilizzo di ResponseBox choice = yesNoBox.prompt (“ Vuoi iniziare ad eseguire i calcoli ?&quot;); while (choice == ResponseBox.YES) { // qui vengono eseguiti i calcoli choice = yesNoBox.prompt (“ Altri calcoli?  &quot;); }
Esercitazione – Caratteri e Stringhe ,[object Object],[object Object],[object Object],[object Object]
Unità didattica 4   – Argomenti svolti ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Más contenido relacionado

La actualidad más candente

Input and output in C++
Input and output in C++Input and output in C++
Input and output in C++Nilesh Dalvi
 
04. constructor & destructor
04. constructor & destructor04. constructor & destructor
04. constructor & destructorHaresh Jaiswal
 
11. MESQUITA CÒRDOVA I HISPANO MUSULMÀ
11. MESQUITA CÒRDOVA I HISPANO MUSULMÀ11. MESQUITA CÒRDOVA I HISPANO MUSULMÀ
11. MESQUITA CÒRDOVA I HISPANO MUSULMÀAssumpció Granero
 
Stream classes in C++
Stream classes in C++Stream classes in C++
Stream classes in C++Shyam Gupta
 
Data Type Conversion in C++
Data Type Conversion in C++Data Type Conversion in C++
Data Type Conversion in C++Danial Mirza
 
08 La Llibertat guiant el poble
08 La Llibertat guiant el poble08 La Llibertat guiant el poble
08 La Llibertat guiant el pobleRamon Pujola
 
Std 10 chapter 11 data type, expression and operators important MCQs
Std 10 chapter 11 data type, expression and operators important MCQsStd 10 chapter 11 data type, expression and operators important MCQs
Std 10 chapter 11 data type, expression and operators important MCQsNuzhat Memon
 
Unitat 15. L August De Prima Porta
Unitat 15. L August De Prima PortaUnitat 15. L August De Prima Porta
Unitat 15. L August De Prima Portatomasggm
 
Advanced Programming C++
Advanced Programming C++Advanced Programming C++
Advanced Programming C++guestf0562b
 

La actualidad más candente (20)

Input and output in C++
Input and output in C++Input and output in C++
Input and output in C++
 
Romànic
RomànicRomànic
Romànic
 
Air cargo logistics
Air cargo logisticsAir cargo logistics
Air cargo logistics
 
Stack and Queue
Stack and Queue Stack and Queue
Stack and Queue
 
6.Gerrers De Riace
6.Gerrers De Riace6.Gerrers De Riace
6.Gerrers De Riace
 
04. constructor & destructor
04. constructor & destructor04. constructor & destructor
04. constructor & destructor
 
This pointer
This pointerThis pointer
This pointer
 
Editorial
EditorialEditorial
Editorial
 
Cfs &amp; icd
Cfs &amp; icd Cfs &amp; icd
Cfs &amp; icd
 
August De Prima Porta
August De Prima PortaAugust De Prima Porta
August De Prima Porta
 
11. MESQUITA CÒRDOVA I HISPANO MUSULMÀ
11. MESQUITA CÒRDOVA I HISPANO MUSULMÀ11. MESQUITA CÒRDOVA I HISPANO MUSULMÀ
11. MESQUITA CÒRDOVA I HISPANO MUSULMÀ
 
Stack Data structure
Stack Data structureStack Data structure
Stack Data structure
 
Stream classes in C++
Stream classes in C++Stream classes in C++
Stream classes in C++
 
Data Type Conversion in C++
Data Type Conversion in C++Data Type Conversion in C++
Data Type Conversion in C++
 
08 La Llibertat guiant el poble
08 La Llibertat guiant el poble08 La Llibertat guiant el poble
08 La Llibertat guiant el poble
 
Std 10 chapter 11 data type, expression and operators important MCQs
Std 10 chapter 11 data type, expression and operators important MCQsStd 10 chapter 11 data type, expression and operators important MCQs
Std 10 chapter 11 data type, expression and operators important MCQs
 
stack
stackstack
stack
 
Unitat 15. L August De Prima Porta
Unitat 15. L August De Prima PortaUnitat 15. L August De Prima Porta
Unitat 15. L August De Prima Porta
 
Advanced Programming C++
Advanced Programming C++Advanced Programming C++
Advanced Programming C++
 
Python Modules
Python ModulesPython Modules
Python Modules
 

Destacado

Comunicare senza la parola?
Comunicare senza la parola?Comunicare senza la parola?
Comunicare senza la parola?byLisaOnlus
 
Film noir pitch
Film noir pitchFilm noir pitch
Film noir pitchkirsty903
 
pasowanie na czytelnika.ppt
pasowanie na czytelnika.pptpasowanie na czytelnika.ppt
pasowanie na czytelnika.pptanyzarg9473
 
Da Kompetanceprofil 25 01 2011
Da Kompetanceprofil 25 01 2011Da Kompetanceprofil 25 01 2011
Da Kompetanceprofil 25 01 2011Tina_Roed
 
1. introduction to bioethics
1.  introduction to bioethics1.  introduction to bioethics
1. introduction to bioethicsMevelle Asuncion
 
Venus Chocolates Halloween Día de Muertos 2016
Venus Chocolates Halloween Día de Muertos 2016Venus Chocolates Halloween Día de Muertos 2016
Venus Chocolates Halloween Día de Muertos 2016VENUS CHOCOLATES
 
Arth 2751 midterm slide list
Arth 2751 midterm slide listArth 2751 midterm slide list
Arth 2751 midterm slide listmary294254374
 
Impact smartphone dans consommation touristique mopa jb soubaigne avril 2016
Impact smartphone dans consommation touristique mopa jb soubaigne avril 2016Impact smartphone dans consommation touristique mopa jb soubaigne avril 2016
Impact smartphone dans consommation touristique mopa jb soubaigne avril 2016Jean-Baptiste Soubaigné
 

Destacado (12)

Comunicare senza la parola?
Comunicare senza la parola?Comunicare senza la parola?
Comunicare senza la parola?
 
Film noir pitch
Film noir pitchFilm noir pitch
Film noir pitch
 
pasowanie na czytelnika.ppt
pasowanie na czytelnika.pptpasowanie na czytelnika.ppt
pasowanie na czytelnika.ppt
 
Da Kompetanceprofil 25 01 2011
Da Kompetanceprofil 25 01 2011Da Kompetanceprofil 25 01 2011
Da Kompetanceprofil 25 01 2011
 
Fase3 b agp
Fase3 b agpFase3 b agp
Fase3 b agp
 
1. introduction to bioethics
1.  introduction to bioethics1.  introduction to bioethics
1. introduction to bioethics
 
Venus Chocolates Halloween Día de Muertos 2016
Venus Chocolates Halloween Día de Muertos 2016Venus Chocolates Halloween Día de Muertos 2016
Venus Chocolates Halloween Día de Muertos 2016
 
Nomad - David McGowan
Nomad - David McGowan Nomad - David McGowan
Nomad - David McGowan
 
Dubai
DubaiDubai
Dubai
 
Arth 2751 midterm slide list
Arth 2751 midterm slide listArth 2751 midterm slide list
Arth 2751 midterm slide list
 
Impact smartphone dans consommation touristique mopa jb soubaigne avril 2016
Impact smartphone dans consommation touristique mopa jb soubaigne avril 2016Impact smartphone dans consommation touristique mopa jb soubaigne avril 2016
Impact smartphone dans consommation touristique mopa jb soubaigne avril 2016
 
Human experiment
Human experimentHuman experiment
Human experiment
 

Similar a Stringhe java

Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)STELITANO
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLextrategy
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)STELITANO
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)STELITANO
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...Cristian Randieri PhD
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Massimiliano Dessì
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)STELITANO
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)STELITANO
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2Majong DevJfu
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourserik0
 

Similar a Stringhe java (20)

Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)Lezione 15 (2 aprile 2012)
Lezione 15 (2 aprile 2012)
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
Array
ArrayArray
Array
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQL
 
Java Generics
Java GenericsJava Generics
Java Generics
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
Java lezione 2
Java lezione 2Java lezione 2
Java lezione 2
 
Java lezione 7
Java lezione 7Java lezione 7
Java lezione 7
 
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009
 
Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)Lezione 8 (12 marzo 2012)
Lezione 8 (12 marzo 2012)
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 
Py a5 python-text
Py a5 python-textPy a5 python-text
Py a5 python-text
 
R Graphics
R GraphicsR Graphics
R Graphics
 
R Vectors
R VectorsR Vectors
R Vectors
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 

Último

Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 

Último (8)

Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 

Stringhe java

  • 1. Caratteri e Stringhe Unità didattica 4 Enrico Giunchiglia Gabriele Palma Fondamenti di Informatica
  • 2.
  • 3. Tabella ASCII (standard) Il carattere 'O' ha codice 79 ( riga 70 + col onna 9 = 79 ). O 9 70
  • 4. Gestione di caratteri D ichiarazione ed inizializzazione char ch1; char ch2 = ' X ' ; Conversione tra int e char . uscitaDati.print( “ Codice ASCII di X: &quot; ); uscitaDati.printLine((int) ' X ' ); uscitaDati.print(&quot; Codice ASCII 88: &quot;); uscitaDati.printLine((char) 88 ); true perchè il codice ASCII di 'A' è 65 e il codice di 'c' è 99 . ' A ' < ' c '
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10. E sempio : cont eggio di v o cali Queste istruzioni contano il numero di vocali nella stringa in ingresso (nome). String nome = richiestaDati.getString(&quot; Nome ?&quot;); int numeroVocali = 0; for (int i = 0; i < nome.length(); i++) { char letter = nome.charAt(i); if (letter == 'a' || letter == 'A' || letter == 'e' || letter == 'E' || letter == 'i' || letter == 'I' || letter == 'o' || letter == 'O' || letter == 'u' || letter == 'U' ) { numeroVocali++; } } uscitaDati.print( &quot; il tuo nome ha &quot; + numeroVocali + &quot; vocali &quot;);
  • 11. E sempio : co nteggio di parole (1) String frase = richiestaDati.getString(“ Dammi una frase :&quot;); int nc = frase.length(); int indice = 0, numeroParole = 0; while (indice < nc) { // ignor a gli spazi bianchi while (frase.charAt(indice) == ' ') { indice++; } // trova la fine della parola while (frase.charAt(indice) != ' ') { indice++; } // un’altra parola trovata, incremento del contatore numeroParole++; } Problem a : Il ciclo più interno potrebbe assegnare ad indice un valore che eccede il massimo consentito (nc)
  • 12. E sempio : cont eggio di parole (2) String frase = richiestaDati.getString(“ Dammi una frase :&quot;); int nc = frase.length(); int indice = 0, numeroParole = 0; while (indice < nc) { // ignor a gli spazi bianchi while ((indice < nc) && (frase.charAt(indice) == ' ')) { indice++; } // trova la fine della parola while ((indice < nc) && (frase.charAt(indice) != ' ')) { indice++; } // un’altra parola trovata, incremento del contatore numeroParole++; } Problem a : numeroParole è maggiore di uno rispetto al conteggio corretto se la frase finisce con uno o più spazi.
  • 13.
  • 14. E sempio : confronto tra oggetti String int javaNum = 0; boolean ripeti = true; String parola; while ( ripeti ) { parola = inDati.getString(“ Prossima parola :&quot;); if ( parola.equals(&quot;STOP&quot;) ) { ripeti = false; } else if ( parola.equalsIgnoreCase(“Java&quot;) ) { javaNum++; } } Continu a a leggere le parole e conta quante volte la parola Java appare nel testo in ingresso.
  • 15. Uguaglianza (==) vs. equals (1) word1 == word2 word1.equals( word2 ) word1 e word2 p untano allo stesso oggetto. word1 word2 String Java true true
  • 16. Uguaglianza (==) vs. equals (2) word1 word2 word1 == word2 word1.equals( word2 ) word1 e word2 p untano ad oggetti diversi con uguale contenuto. String Java true false String Java
  • 17. Uguaglianza (==) vs. equals (3) word1 word2 word1 == word2 word1.equals( word2 ) word1 e word 2 p untano ad oggetti diversi con diversi contenuti. String Java false false String Bali
  • 18. Altri metodi della classe St ring Me todo Significato substring x.substring(n,m) restituisce una stringa corrispondente alla porzione di x dalla posizione n alla posizione m String s = “Viva Java!”; String t = substring(1,3); // contiene “iva” trim x.trim() restituisce una stringa con lo stesso contenuto di x privato di eventuali spazi all’inizio e alla fine startsWith x.startsWith(y) restituisce true se x comincia con y String s = “Viva Java!”, t = “Viva”; boolean r = s.startsWith(t); endsWith x.endsWith(y) restituisce true se x termina con y String s = “Viva Java!”, t = “Java!”; boolean r = s.endsWith(t); indexOf x.indexOf(c) restituisce la posizione di c in x e x.indexOf(c,n) restituisce la posizione di c in x cominciando la ricerca dalla posizione n; entrambe restituiscono –1 se c non è presente in x (c di tipo char)
  • 19.
  • 20. Metodi di StringBuffer Me todo Significato charAt x.charAt(n) restituisce il carattere in posizione n (analogo alla classe String) length x.length() restituisce il numeo di caratteri in x (analogo alla classe String) setCharAt x.setCharAt(n, c) imposta il carattere in posizione n al valore c (c è di tipo char) deleteCharAt x.deleteCharAt(n) cancella il carattere in posizione n append x.append(y) concatena a x il contenuto di y reverse x.reverse() rovescia il contenuto di x insert x.insert(n,y) inserisce y all’interno di x a partire dalla posizione n delete x.delete(n,m) cancella dalla posizione n alla posizione m toString y = x.toString() restituisce il contenuto di x sotto forma di String (y è un oggetto String)
  • 21. Utilizzo di StringBuffer (1) Rimpiazza tutte le vocali dell’oggetto frase con ' X ' String frase = richiestaDati.getString(“ Frase :&quot;); StringBuffer temp = new StringBuffer(frase); for (int i = 0; i < temp.length(); i++) { char c = temp.charAt(i); if ( c == 'a' || c == 'A' || c == 'e' || c == 'E' || c == 'i' || c == 'I' || c == 'o' || c == 'O' || c == 'u' || c == 'U' ) { temp.setCharAt(i, 'X'); } } uscitaDati.print(temp);
  • 22. Utilizzo di StringBuffer (2) Costruisce una frase con le sole parole di lunghezza pari String parola; StringBuffer temp = new StringBuffer(&quot;&quot;); boolean ripeti = true; while ( ripeti ) { parola = inDati.getString(“ Prossima parola :&quot;); if ( parola.equals(&quot;STOP&quot;) ) { ripeti = false; } else if ( parola.length() % 2 == 0 ) { temp.append(parola + &quot; &quot;); } } Aggiunge la parola e uno spazio a tempStringBuffer .
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. Gestire la selezione con ResponseBox int selection = yesNoBox.prompt(“ Premi un b o tton e &quot;); switch (selection) { case ResponseBox.YES: messageBox.show(“ Hai premuto Yes&quot;); break; case ResponseBox.NO: messageBox.show(“ Hai premuto No “); break; }
  • 28. Esempio di utilizzo di ResponseBox choice = yesNoBox.prompt (“ Vuoi iniziare ad eseguire i calcoli ?&quot;); while (choice == ResponseBox.YES) { // qui vengono eseguiti i calcoli choice = yesNoBox.prompt (“ Altri calcoli? &quot;); }
  • 29.
  • 30.

Notas del editor

  1. We have also seen the string concatenation operation. For example, the following code reads in a person’s name and greets the user: //assume inputBox and messageBox are declared //and initialized correctly String name; name = inputBox.getString(&amp;quot;What is your name?&amp;quot;); messageBox.show(&amp;quot;Hello, &amp;quot; + name + &amp;quot;. Nice to meet you.&amp;quot;);
  2. When we write String name; we must say “name is a variable of type String whose value is a reference to an instance of String” to be precise. However, when the value of a variable X is a reference to an instance of class Y, we usually say “X is an instance of Y” or “X is a Y object.” For example, we say canvas is a DrawingBoard object
  3. Remember that a String is an object. If we simply declare, for example, String str3; and forget to create a String object, then str3 is a null object. You will get a NullPointerException if you try to a method of non-existent object, such as str3 in this example.
  4. Using the toUpperCase method, that converts all alphabetic characters to uppercase, we can rewrite the code as char letter; String name = inputBox.getString(&amp;quot;What is your name?&amp;quot;); int numberOfCharacters = name.length(); int vowelCount = 0; String nameUpper = name.toUpperCase(); for (int i = 0; i &lt; numberOfCharacters; i++) { letter = nameUpper.charAt(i); if ( letter == &apos;A&apos; || letter == &apos;E&apos; || letter == &apos;I&apos; || letter == &apos;O&apos; || letter == &apos;U&apos; ) { vowelCount++; } } messageBox.show(name + &amp;quot;, your name has &amp;quot; + vowelCount + &amp;quot; vowels&amp;quot;);
  5. General idea expressed in pseudocode is as follows: read in a sentence; while (there are more characters in the sentence) { look for the beginning of the next word; now look for the end of this word; increment the word counter; }
  6. See Exercise 8.17 on page 408. One approach to solve this “off-by-one” error is to use two counters to keep track of the begin index (the position of the first character) and the ending index (the position of the last character) of the words in a sentence. The second approach is to add an if statement after the outer while to determine whether the last index of the sentence is a blank or not. The third approach is to use the trim method of the String class. The trim method removes the leading and trailing blank spaces (actually all whitespaces and control characters) from a string. Question: Which approach is the best solution? Discuss.
  7. Notice that we wrote word.equals( “STOP”) not word == “STOP” the two boolean expressions have quite different effects. We will describe their difference later.
  8. Here are some examples: String str1 = “Java”, str2 = “ Wow “; str1.compareTo( “Hello” ); //returns positive integer //because str1 &gt;= “Hello” str1.substring( 1, 4 ); //returns “ava” str2.trim( ) //returns “Wow”, str2 stays same str1.startsWith( “Ja” ); //returns true str1.endsWith( “avi” ); //returns false
  9. Notice how the input routine is done. We are reading in a String object and converting it to a StringBuffer object, because we cannot simply assign a String object to a StringBuffer variable. For example, the following code is invalid: StringBuffer strBuffer = inputBox.getString( ); We are required to create a StringBuffer object from a String object as in String str = &amp;quot;Hello&amp;quot;; StringBuffer strBuf = new StringBuffer( str ); You cannot input StringBuffer objects. You have to input String objects and convert them to StringBuffer objects.
  10. Notice that we can write the code using only String objects: boolean repeat = true; String word, newSentence; newSentence = &amp;quot;&amp;quot;; //empty string while ( repeat ) { word = inputBox.getString(&amp;quot;Next word:&amp;quot;); if ( word.equals(&amp;quot;STOP&amp;quot;) ) repeat = false; else if ( word.length() % 2 == 0 ) newSentence = newSentence + word; //string concatenation } Whether we use String or StringBuffer depends on the problem we try to solve.