Eccezioni - PowerPoint PPT Presentation

About This Presentation
Title:

Eccezioni

Description:

Title: Introduzione Author: Lab2 Last modified by: Lab2 Created Date: 3/2/2006 12:01:22 PM Document presentation format: Presentazione su schermo Company – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 10
Provided by: lab2253
Category:

less

Transcript and Presenter's Notes

Title: Eccezioni


1
Eccezioni Precisazioni e approfondimenti
  • Costruttore il parametro String definisce il
    messaggio di errore associato alleccezione
  • Metodi particolarmente significativi
  • getMessage() ritorna listanza di String con il
    messaggio di errore specificato allistanziazione
    delloggetto
  • printStackTrace() stampa lo Stack Trace
    permettendo di individuare metodo e linea di
    codice che ha lanciato leccezione (utile per il
    debug)
  • getStackTrace() ritorna un array di
    StackTraceElement lelemento di indice zero è
    la cima dello stack
  • fillInStackTrace() genera larray di
    StackTraceElement accessibile mediante
    getStackTrace() o il cui contenuto è stampato da
    printStackTrace (attenzione diverso da
    setStackTrace!)
  • Classe StackTraceElement rappresenta
    uninvocazione di metodo (a parte lelemento in
    cima allo stack che è il metodo in esecuzione e
    da cui viene generato loggetto Throwable)

2
Esercizio 3 filtraggio file di testo
  • Dallesercizio 3 dellesecitazione n.5
  • Realizzare unapplicazione Java in grado di
    cercare una qualunque parola allinterno del file
    testo.txt allegato a queste slide, contando il
    numero di occorrenze.
  • Lapplicazione deve inoltre essere in grado di
    creare un nuovo file testo2.txt ottenuto da
    testo.txt sostituendo a tutte le occorrenze di un
    vocabolo il medesimo vocabolo con però tutte le
    lettere maiuscole.
  • La lettura delle specifiche permette di definire,
    a livello astratto, lesistenza di un componente
    in grado di svolgere due operazioni (ricerca di
    una parola con conteggio delle occorrenze
    sostituzione delle occorrenze di un vocabolo)

3
Soluzione il componente
package esercitazioni05.filtro import
java.io. import java.util.StringTokenizer publ
ic class TextFileAnalyzer private File
file // la classe file implementa un oggetto con
le // caratteristiche di un file (vedi
java.io) public TextFileAnalyzer(String
fileName) throws FileNotFoundException file
new File(fileName) if (! file.exists()) thro
w new FileNotFoundException("Il file " fileName
"non esiste") Nota se si fosse gestita
leccezione dentro il costruttore (anziché
lanciarla), si avrebbe un comportamento cablato
nelloggetto, cosa che impedirebbe a chi crea
listanza di prendere diverse contromisure in
caso di file non trovato
4
StringTokenizer
  • La classe java.util.StringTokenizer permette di
    spezzare una stringa in più sottostringhe (token)
    distinguibili perché delimitate da caratteri
    considerati come separatori
  • Costruttore
  • StringTokenizer(String s, String delim, boolean
    returnDelims)
  • StringTokenizer(String s, String delim)
  • StringTokenizer(String s)
  • I separatori sono i singoli caratteri della
    stringa delim nel caso si ricorra al costruttore
    ad un parametro, delim è automaticamente
    impostata al valore di default \t\n\r\f
    (nota \t, \n, \r, \f sono considerati come
    singoli caratteri)
  • Metodi significativi (di veda la documentazione
    sulle API Java)
  • hasMoreToken() true se la stringa contiene altri
    token
  • nextToken() restituisce il token
  • nextToken(String delim) restituisce il token
    individuato usando come separatori quelli del
    parametro delim (quello del metodo, non del
    costruttore!)

5
Soluzione la funzionalità (metodo) di ricerca
  • public int searchWord(String word) throws
    IOException
  • BufferedReader lineReader new
    BufferedReader(new FileReader(file))
  • int counter 0
  • String line, token
  • StringTokenizer tokenizer
  • do
  • line lineReader.readLine()
  • if (line ! null)
  • tokenizer new StringTokenizer(line, " \n")
    // delimitatori
  • while (tokenizer.hasMoreTokens())
  • token tokenizer.nextToken()
  • if (token.equals(word)) counter
  • while (line ! null)
  • return counter

6
Soluzione il metodo di ricerca e sostituzione
  • public void replaceWord(String originalWord,
    String newWord) throws IOException
  • BufferedReader lineReader new
    BufferedReader(new FileReader(file))
  • BufferedWriter lineWriter new
    BufferedWriter(new FileWriter(file.getParent()Fil
    e.separator"testo2.txt"))
  • String originalLine, newLine, token
  • StringTokenizer tokenizer
  • La scelta di usare BufferedReader e
    BufferedWriter deriva dalla disponibilità di
    metodi comodi per lapplicazione, quali la
    lettura per linee e la corretta scrittura del
    newLine.

7
Soluzione il metodo di ricerca e sostituzione
do originalLine lineReader.readLine() edite
dLine "" if (originalLine ! null)
tokenizer new StringTokenizer(originalLine,
" \n",true) while (tokenizer.hasMoreTokens())
token tokenizer.nextToken() if
(token.equals(originalWord)) editedLine
editedLine newWord else editedLine
editedLine token lineWriter.write(editedLi
ne) lineWriter.newLine() lineWriter.flush()
// altrimenti il buffer non scrive i dati sul
file while (originalLine ! null)
8
Soluzione il main
public class RunTextFileAnalyzer public static
void main(String args) TextFileAnalyzer
analyzer String input boolean searchAgain
true // INPUT DA CONSOLE BufferedReader
stdInput new BufferedReader(newInputStreamReade
r(System.in)) try while (searchAgain)
analyzer new TextFileAnalyzer(args0)
System.out.print("Inserire parola da cercare
") input stdInput.readLine() if
(input.equals("end_search")) searchAgain
false else System.out.println("Numero
occorrenze di " input " "
analyzer.searchWord(input)) // fine
while
9
Soluzione il main
// occorre creare una nuova istanza di
TextFileAnalyzer perché il // BufferedReader
usato internamente non permette di riportare il
puntatore // allinizio del file analyzer new
TextFileAnalyzer(args0) String oldWord,
newWord System.out.print("Inserire parola da
rimpiazzare ") oldWord stdInput.readLine()
System.out.print("Inserire parola sostitutiva
") newWord stdInput.readLine() analyzer.repl
aceWord(oldWord, newWord) catch (IOException
e) System.err.println("Attezione "
e.getMessage()) // fine main
Write a Comment
User Comments (0)
About PowerShow.com