27
© M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

© M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

Embed Size (px)

Citation preview

Page 1: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

A.A. 2004-05

GESTIONE DEL TESTO

Page 2: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

2

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Argomenti della lezione

Linguaggio naturale

Il pakage java.text

Page 3: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

3

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Linguaggio naturale

Page 4: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

4

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Interfacce utente

Un programma comunica con i suoi utilizzatoriAttraverso immagini, suoni e testi

I messaggi non sono sempre completamente predefinitiSpesso il loro contenuto è parametrico

Anche l’utente comunicaUtilizza “segni convenzionali”:

o movimenti del mouse, sequenze di caratteriOccorre riconoscerne il significato

Page 5: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

5

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Comunicazione testuale

Sfrutta il linguaggio naturale dell’utilizzatoreÈ legata alla sua “cultura”Lingua adottata, convenzioni di rappresentazione

Impone pesanti vincoli quando occorre realizzare programmi “multiculturali”

Page 6: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

6

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Sintesi di messaggio

Un messaggio testuale è composto da una sequenza di caratteri In parte prefissati In parte determinati in fase di esecuzione

Occorre tenere presenti le regole della sintassiConcordanze (genere, numero, persona, …)

Page 7: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

7

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

//Restituisce il messaggio adattato//Restituisce il messaggio adattato

String getMessage(int i) {String getMessage(int i) { String s;String s; if (i!=1)if (i!=1) s=“s=“Sono stati letti ”+i+“ elementi..”;”; elseelse s=“s=“È stato letto un elemento.”;”; return s; return s; }}

//Restituisce il messaggio adattato//Restituisce il messaggio adattato

String getMessage(int i) {String getMessage(int i) { String s;String s; if (i!=1)if (i!=1) s=“s=“Sono stati letti ”+i+“ elementi..”;”; elseelse s=“s=“È stato letto un elemento.”;”; return s; return s; }}

Page 8: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

8

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Rappresentare i numeri

Le classi “wrapper” offrono il metodo statico toString(…)Restituisce la stringa corrispondente al

parametroNon si può controllare la formattazione

o Numero di cifre, separatore decimale, notazione, …

Page 9: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

9

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Analisi di testi

Estremamente più complessaOccorre suddividere, a priori, il testo in unità

elementari

In alcuni casi occorre trattare informazioni strutturateData, ora, valuta, …

La disposizione ed il contenuto dipendono dalla cultura dell’interlocutore

Page 10: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

10

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

StringTokenizer st = new StringTokenizer(

“Questa è una prova”);

while (st.hasMoreTokens()) System.out.println(st.nextToken());

StringTokenizer st = new StringTokenizer(

“Questa è una prova”);

while (st.hasMoreTokens()) System.out.println(st.nextToken());

QuestaQuestaèèunaunaprovaprova

QuestaQuestaèèunaunaprovaprova

Scandire una stringa

Si può usare la classe java.util.StringTokenizerSuddivisione basata sugli spaziPochi controlli disponibili

Page 11: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

11

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Analizzare un numero Le classi “wrapper” offrono metodi per convertire

stringhe in numeri Integer.parseInt(String val) Double.parseDouble(String v) Possono lanciare NumberFormatException

Basati sulla rappresentazione anglosassone

String s=“123,456”;double d;try {

d=Double.parseDouble(s);} catch (NumberFormatException nfe) {

d=0.0;}

String s=“123,456”;double d;try {

d=Double.parseDouble(s);} catch (NumberFormatException nfe) {

d=0.0;}

Page 12: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

12

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Confronto

La classe String offre il metodo compareToBasato sulla rappresentazione UNICODE dei

caratteriNon fornisce i risultati attesi con le lettere

accentate

Page 13: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

13

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Internazionalizzazione

Fattori da gestire quando si realizzano versioni per più culture

Messaggi Componenti grafici Suggerimenti SuoniColoriIcone

Numeri (valute/misure)Data/oraIndirizziNumeri telefoniciImpaginazione

Page 14: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

14

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Culture

La classe java.util.Locale modella in ambito culturale specifico In termini di lingua e nazione

La conoscenza del locale permette di adattare le operazioni di analisi e sintesi

Page 15: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

15

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

String getMessage() { Locale loc=Locale.getDefault();

//formato ISO 639: codice a due lettere String lang=loc.getLanguage();

String msg; if ( “it”.equals(lang) )

msg=“Premere <invio>”; else msg=“Press <enter>”; return msg;}

String getMessage() { Locale loc=Locale.getDefault();

//formato ISO 639: codice a due lettere String lang=loc.getLanguage();

String msg; if ( “it”.equals(lang) )

msg=“Premere <invio>”; else msg=“Press <enter>”; return msg;}

Page 16: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

16

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Il package java.text

Insieme di classi specializzate nella gestione del testoAnalisi/sintesi/confrontoNumeri, date, messaggi testuali In dipendenza di una cultura specifica (Locale)

Page 17: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

17

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

java.text.java.text.FormatFormatjava.text.java.text.FormatFormatformat(…)parseObject(…)

DecimalDecimalFormatFormat

DecimalDecimalFormatFormat

ChoiceChoiceFormatFormatChoiceChoiceFormatFormat

SimpleDate SimpleDate FormatFormat

SimpleDate SimpleDate FormatFormat

DateDate FormatFormat

DateDate FormatFormat

NumberNumber FormatFormat

NumberNumber FormatFormat

MessageMessage FormatFormat

MessageMessage FormatFormat

Page 18: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

18

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

NumberFormat

Fornisce metodi per l’analisi e la sintesi di valori numerici:Numeri frazionariPercentuali Valuta

Fornisce risultati differenti in funzione della cultura indicata

Page 19: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

19

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

String getValue(double d) { Locale loc=Locale.ITALIAN;

NumberFormat nf= NumberFormat.getNumberInstance(loc); String s=nf.format(d);

return s;}

String getValue(double d) { Locale loc=Locale.ITALIAN;

NumberFormat nf= NumberFormat.getNumberInstance(loc); String s=nf.format(d);

return s;} getValue(99.95)getValue(99.95)

99,9599,95

getValue(99.95)getValue(99.95)

99,9599,95

Page 20: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

20

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

double parse(String s) throws ParseException { Locale loc=Locale.ITALIAN;

NumberFormat nf= NumberFormat.getNumberInstance(loc); Number n=nf.parse(s);

return n.doubleValue();}

double parse(String s) throws ParseException { Locale loc=Locale.ITALIAN;

NumberFormat nf= NumberFormat.getNumberInstance(loc); Number n=nf.parse(s);

return n.doubleValue();}

parse(“99,95”)parse(“99,95”)

99.9599.95

parse(“99,95”)parse(“99,95”)

99.9599.95

Page 21: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

21

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

String getPrice(double d) { Locale loc=Locale.ITALIAN;

NumberFormat nf= NumberFormat.getCurrencyInstance(loc); String s=nf.format(d);

return s;}

String getPrice(double d) { Locale loc=Locale.ITALIAN;

NumberFormat nf= NumberFormat.getCurrencyInstance(loc); String s=nf.format(d);

return s;} getPrice(99.95)getPrice(99.95)

€ € 99.9599.95

getPrice(99.95)getPrice(99.95)

€ € 99.9599.95

Page 22: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

22

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

DateFormat

Analisi e rappresentazione di data e/o oraDiversi formati (breve, medio, lungo, completo)Permette di impostare il fuso orario (time zone)Supporta calendari arbitrari (di classe

java.util.Calendar)

Page 23: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

23

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

String getTime(Date d) { Locale loc=Locale.ITALIAN;

DateFormat df= DateFormat.getTimeInstance( DateFormat.SHORT, loc); String s=df.format(d);

return s;}

String getTime(Date d) { Locale loc=Locale.ITALIAN;

DateFormat df= DateFormat.getTimeInstance( DateFormat.SHORT, loc); String s=df.format(d);

return s;}

getTime(getTime( new Date())new Date())

17.3317.33

getTime(getTime( new Date())new Date())

17.3317.33

Page 24: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

24

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

MessageFormat

Classe che offre funzionalità sofisticate per costruire ed analizzare messaggiUtilizza una stringa di formato ed un array di

parametriSimile alla funzione sprintf() del linguaggio C

Page 25: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

25

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

String getMsg(String s, int i) { String pattern= “La cartella {0} contiene {1} file”; MessageFormat mf=

new MessageFormat(pattern);

Object[] args= new Object[] {s, new Integer(i)};

return mf.format(args));}

String getMsg(String s, int i) { String pattern= “La cartella {0} contiene {1} file”; MessageFormat mf=

new MessageFormat(pattern);

Object[] args= new Object[] {s, new Integer(i)};

return mf.format(args));}

getMsg(“c:\”,3)getMsg(“c:\”,3)

La cartella c:\La cartella c:\contiene 3 filecontiene 3 file

getMsg(“c:\”,3)getMsg(“c:\”,3)

La cartella c:\La cartella c:\contiene 3 filecontiene 3 file

Page 26: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

26

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

Collator

Classe specializzata nel confrontare stringhe in un dato linguaggioRiordina le lettere accentate, in modo da

garantirne l’opportuna sequenzaOffre vari livelli di precisione nel confronto

Page 27: © M. Badella, G. Malnati, L. Tessitore 2003-05 Programmazione ad Oggetti A.A. 2004-05 GESTIONE DEL TESTO

27

© M

. Bad

ella

, G. M

alna

ti, L

. Tes

sito

re 2

003-

05

Programmazione ad Oggetti

String[] parole= {“Squadra”,”sì”, “si”};

Locale loc= Locale.ITALIAN;

Collator c= Collator.getInstance(loc);c.setStrength(Collator.SECONDARY);

Arrays.sort(parole,c);

for (int i=0; i<parole.length; i++) System.out.println(parole[i]);

String[] parole= {“Squadra”,”sì”, “si”};

Locale loc= Locale.ITALIAN;

Collator c= Collator.getInstance(loc);c.setStrength(Collator.SECONDARY);

Arrays.sort(parole,c);

for (int i=0; i<parole.length; i++) System.out.println(parole[i]);

sisisìsìSquadraSquadra

sisisìsìSquadraSquadra