Scrivi la classe TextFormatter
contenente il metodo:
public static String reformat(Path source)
Tale metodo legge il contenuto di un file di testo e lo ritorna formattandolo secondo le regole seguenti:
' '
) all’inizio e alla fine del testo'.'
, ','
, ';'
, ':'
, '!'
, '?'
)Ad esempio per un file contenente il testo:
John,Malkovich?John : Malkovich!!! !
John Malkovich !? !?John;Malkovich . . .
il metodo reformat
ritorna la stringa:
John, Malkovich? John: Malkovich!!!! John Malkovich!?!? John; Malkovich...
Scrivi la classe CsvValidator
contenente il metodo:
public static boolean isValid(Path csvFile)
Tale metodo verifica che il file in formato csv csvFile
rispetti le seguenti regole:
';'
Se tutte le regole sono rispettate il metodo ritorna true
, in qualsiasi altro caso il metodo ritorna false
. Se il file non è accessibile il metodo ritorna false
.
Esempio di file valido (3 x 3):
1;2;3
4;5;6
7;8;9
Scrivi la classe TableParser
contenente il metodo:
public static void convertTable(Path htmlFile, Path csvFile)
Tale metodo legge il file in formato HTML htmlFile
. Se nel file HTML è contenuta almeno una tabella, il metodo converte il contenuto della prima tabella contenuta nel file in formato CSV e lo salva nel file csvFile
.
La conversione avviene secondo le regole seguenti:
<!---
,--->
)<table>
e </table>
<tr>
e </tr>
<td>
e </td>
<th>
e </th>
)Ad esempio per un file html contenente:
...
<h1>Tabella di test</h1>
<p>Prova a convertire la seguente tablella:</p>
<!-- Questo è un commento -->
<table><!-- Qui inizia la tabella -->
<tr><!-- Prima riga -->
<td>A</td><td>B</td><td>C</td><td>D</td>
</tr><!-- Fine prima riga -->
<tr><!-- Seconda riga -->
<td>1</td><td>1234</td><td>cane<!--- BAU!!! --->
</td><td>gatto</td>
</tr><!-- Fine seconda riga -->
</table><!-- Qui termina la tabella -->
...
Verrà prodotto il seguente file CSV:
A;B;C;D;
1;1234;cane;gatto;
Scrivi il programma CharCounter
che calcola la frequenza dei caratteri alfabetici contenuti in un file di testo. Il percorso del file è fornito come primo argomento da linea di comando. Il programma legge il contenuto del file e stampa il conteggio dei caratteri (case insensitive) e il tempo impiegato. Ad esempio, per un file contenente il testo seguente:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
il programma stampa:
'a': 29
'b': 3
'c': 16
'd': 19
'e': 38
'f': 3
'g': 3
'h': 1
'i': 42
'j': 0
'k': 0
'l': 22
'm': 17
'n': 24
'o': 29
'p': 11
'q': 5
'r': 22
's': 18
't': 32
'u': 29
'v': 3
'w': 0
'x': 3
'y': 0
'z': 0
Parse time: 6ms
Se il percorso fornito come primo argomento non è valido (non esiste, non è leggibile), il programma stampa il messaggio "Error reading <file>"
e termina.
Se non vengono forniti argomenti il programma stampa il messaggio "Usage: java CharCounter <file>"
.
Per verificare il buon funzionamento del tuo programma puoi usare la Divina commedia e cronometrare il tempo impiegato (usa System.currentTimeMillis()
per misurare il tempo).
Scrivi il programma ButterFyler
utile per codificare un file di testo (UTF-8) in alfabeto farfallino e salvarlo in un file di destinazione (se non conosci l’alfabeto farfallino vedi wikipedia).
La classe deve contenere il metodo encode
che codifica il file source
e lo salva nel file dest
:
public static void encode(Path source, Path dest)
Per verificare il buon funzionamento del tuo programma prova a codificare la Divina commedia e a cronometrare il tempo impiegato per la codifica (usa System.currentTimeMillis()
per misurare il tempo).
Record
e RankingManager
Record
La classe Record
è utilizzata per rappresentare i dati di un record nella classifica di un videogioco. La classe è molto semplice; possiede solo i due attributi privati name
(il nome del giocatore che ha fatto il record) e points
(i punti totalizzati). Entrambi gli attributi sono accessibili in sola lettura.
La classe Record
esporta pure il costruttore personalizzato che permette di inizializzare name
e points
(in questo ordine).
Inoltre Record
esporta e il metodo String toString()
che ne ritorna la rappresentazione testuale nel formato:
<name>: <points>
Esempio:
Luigi: 10000
RankingManager
Serve per caricare i record salvati in un file CSV e per trovare il giocatore con il punteggio più alto.
I record sono memorizzati nella lista di Record records
(attributo privato List<Record>
).
La classe RankingManager
esporta i seguenti metodi:
public RankingManager(Path csvPath)
Il costruttore personalizzato permette di definire il percorso del file CSV.
loadRanking
public void loadRanking()
Carica i dati dal file CSV. Se non è possibile accedere o leggere il file, solleva una IOException
. Le righe del file CSV che contengono dati non validi non vengono importate.
getRecords
public List<Record> getRecords
Ritorna la lista (records
) dei record caricati dal file CSV.
getWinner
public Record getWinner()
Ritorna il Record
con il punteggio più alto in records
. Se la lista è vuota ritorna null
.
Su ogni riga del file CSV deve essere registrato un record nel formato:
<name>,<points>
Dove:
<name>
: stringa non vuota, deve contenere almeno un carattere diverso da ‘ ‘ (blank)<points>
: numero interoTutte le righe che non rispettano questo formato sono considerate non valide e vengono ignorate dal metodo loadRanking
.
Ad esempio un file CSV valido potrebbe contenere i dati seguenti:
Mario,50
Alb,-200
Luigi,10000
Zorro,0
Pippo,400
Employee
e EmployeeManager
Employee
La classe Employee
è utilizzata per rappresentare i dati di un impiegato aziendale e il suo stipendio. La classe è molto semplice; possiede solo i due attributi privati name
(il nome dell’impiegato) e salary
(lo stipendio dell’impiegato [double
]). Entrambi gli attributi sono accessibili in sola lettura.
La classe Employee
esporta pure il costruttore personalizzato che permette di inizializzare name
e salary
(in questo ordine).
Inoltre Employee
esporta e il metodo boolean equals(Employee e)
che ritorna true
se i due impiegati confrontati posseggono lo stesso nome (ignora maiuscole e minuscole) e lo stesso stipendio.
EmployeeManager
Serve per caricare i dati riguardanti gli impiegati da un file CSV e per trovare la media degli stipendi.
I dati sono memorizzati nella lista di Employee employees
(attributo privato List<Employee>
).
La classe EmployeeManager
esporta i seguenti metodi:
public EmployeeManager(String csvPath)
Il costruttore personalizzato permette di definire il percorso del file CSV.
loadEmployees
public void loadEmployees()
Carica i dati dal file CSV. Se non è possibile accedere o leggere il file, solleva una IOException
. Le righe del file CSV che contengono dati non validi non vengono importate.
getEmployees
public List<Employee> getEmployees()
Ritorna la lista (employees
) degli impiegati.
getAverageSalary
public double getAverageSalary()
Ritorna lo stipendio medio (tra tutti quelli contenuti in employees
). Se la lista è vuota ritorna -1.0
.
Su ogni riga del file CSV deve essere registrato un impiegato nel formato:
<salary>;<name>
Dove:
<salary>
: numero double
<name>
: stringa non vuota, deve contenere almeno un carattere diverso da ' '
(blank)Tutte le righe che non rispettano questo formato sono considerate come non valide e vengono ignorate dal metodo loadEmployees
.
Ad esempio un file CSV valido potrebbe contenere i dati seguenti:
1250.5;Mario
200;Alb
1000.5;Luigi
8230.25;Zorro
400;Pippo