Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vitalegi/kata-args-parser
https://github.com/vitalegi/kata-args-parser
Last synced: 1 day ago
JSON representation
- Host: GitHub
- URL: https://github.com/vitalegi/kata-args-parser
- Owner: vitalegi
- Created: 2022-12-22T11:20:10.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-06-18T05:39:17.000Z (5 months ago)
- Last Synced: 2024-06-18T06:49:18.582Z (5 months ago)
- Language: Java
- Size: 78.1 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Implementare una classe `Args` che realizzi un parser.
# Operative info
## Requirements
- JDK 8
- maven## Build
```
mvn clean packageor (to use the configured mvn):
./mvnw clean package
```## Run tests
```
mvn testor (to use the configured mvn):
./mvnw test
```# Fase 1
Deve implementare i seguenti metodi:
## `Args(String format, String args)`
Parametri:
- `format`: è una stringa contenente la definizione del parser. è costituita da una serie di token nel formato `[,]*`.
- `` è un carattere alfabetico
- `` rappresenta il tipo di quel campo, valori possibili:
- `!`: il campo `` è un boolean (`true` → `true`, `false` → `false`, altri valori → `eccezione`)
- `#`: il campo `` è un integer
- `&`: il campo `` è una stringa
- ``: il campo `` è una stringaEsempio: `a!,b#,c` → `a` è un boolean, `b` un intero, `c` una stringa
- `args`: è una stringa contenente il testo da parsare
Esempio: `-a true -b -53 -c hello`, col format `a!,b#,c`, identifica a=true, b=-53, c="hello"
Il metodo lancia `ArgsException` se si verifica un errore. Esempi di errore possono essere:
- format contiene caratteri non validi
- args contiene campi non riconosciuti
- il valore in `args` non è compatibile col tipo atteso## `int getInteger(String name)`
Restituisce il valore del campo `name` della stringa `args` passata al costruttore.
Eccezione se il campo non è un intero o non esiste nella definizione.
## `boolean getBoolean(String name)`
Restituisce il valore del campo `name` della stringa `args` passata al costruttore.
Eccezione se il campo non è un boolean o non esiste.
## `String getString(String name)`
Restituisce il valore del campo `name` della stringa `args` passata al costruttore.
Eccezione se il campo non esiste.
# Fase 2
Hai fatto un lavoro eccellente nel reinventare l'acqua calda, ora tutti vogliono usare la tua classe e ti si chiede di estenderla:
- `LocalDate getLocalDate(String name)`: restituisce un LocalDate. Il `type` corrispondente è `%`. Formato atteso del valore: `yyyy-MM-dd`
- `BigDecimal getBigDecimal(String name)`: restituisce un BigDecimal. Il `type` corrispondente è `$`. Formato atteso del valore: `123.456`# Fase 3
- i valori di `args` possono contenere degli spazi, se la stringa inizia/finisce con doppi apici. `-c "hello world"` è una stringa valida, `-c hello world` no.
- i valori in `format` possono avere un nome più lungo di un carattere
- in `args` ogni `name` può avere più valori.
- Dati i precedenti getter, prevedi l'equivalente che restituisca la lista di valori, ad esempio `List getStrings(String name)`
- I vecchi getter restituiscono il primo elemento della lista
- L'ordine della lista è quello dato dall'utenteEsempio:
```
new Args("bool!,b#,text", "-bool true -bool false -b -53 -text hello -text world -text \"foo bar\"")
getString("text"); // "hello"
getStrings("text"); // ["hello", "world", "foo bar"]
getBoolean("bool"); // true
getBooleans("bool"); // [true, false]
```