PDA

View Full Version : [java] identificare coasa c'è in una stringa


gaglioppo
09-05-2006, 11:46
ciao amici,

ho una stringa in java che potrebbe contenere: un nome, un intero, un numero con virgola oppure una percetuale del tipo "10%".
Come potrei identificare con esattezza in quale caso mi trovo?

ho provato a fare Double.parseDouble(stringa); e cercare di catturare l'errore ma nn ci sono ancora riuscito.... suggerimenti?

grazie

andbin
09-05-2006, 13:34
ciao amici,

ho una stringa in java che potrebbe contenere: un nome, un intero, un numero con virgola oppure una percetuale del tipo "10%".
Come potrei identificare con esattezza in quale caso mi trovo?Quindi riepiloghiamo. Puoi avere:
- "blabla"
- "12345"
- "67,89"
- "12%"
Giusto?

Come suggerimento potrei consigliarti di creare un metodo apposito che data una stringa in input, restituisce una costante intera che indica il tipo di stringa.

Una cosa: il caso della stringa con virgola "67,89", lo devi poi convertire in un numero (come float/double)?

Angus
09-05-2006, 14:13
ciao amici,

ho una stringa in java che potrebbe contenere: un nome, un intero, un numero con virgola oppure una percetuale del tipo "10%".
Come potrei identificare con esattezza in quale caso mi trovo?

ho provato a fare Double.parseDouble(stringa); e cercare di catturare l'errore ma nn ci sono ancora riuscito.... suggerimenti?

grazie

Per gli interi e i numeri con virgola sei sulla strada giusta, sempre che tu intenda attenerti allo standard Java sul formato dei numeri. Cos'è che non riesci a fare utilizzando Double.parseDouble(s)?
Per le percentuali ed altre cose puoi utilizzare le espressioni regolari (java.util.regex).

shinya
09-05-2006, 14:17
Per le percentuali ed altre cose puoi utilizzare le espressioni regolari (java.util.regex).

Io utilizzerei le regex per tutto:
nome -> /[a-zA-Z]+/
intero -> /\d+/
float -> /\d+\.\d+/
percentuale -> /\d+%/

considerando che in java hanno una sintassi un pelino diversa (ci vogliono due \\ prima degli identificatori \d,\w, ecc...

pinok
09-05-2006, 14:18
ciao amici,

ho una stringa in java che potrebbe contenere: un nome, un intero, un numero con virgola oppure una percetuale del tipo "10%".
Come potrei identificare con esattezza in quale caso mi trovo?

ho provato a fare Double.parseDouble(stringa); e cercare di catturare l'errore ma nn ci sono ancora riuscito.... suggerimenti?

grazie
Devi lavorarci con un po' di if e try catch; siccome credo che un po' di try catch annidati potrebbero rallentare un filino, io farei:

boolean trovato = false; // Generico
boolean isInt = false;
boolean isFloat = false;
boolean isPercent = false;
boolean isString = false;
try { // Provo l'intero
Integer.parseInt(dato);
isInt = true;
trovato = true;
} catch(Exception e) {}

if (!trovato) try // Prova double
{
Float.parseFloat(dato);
isFloat = true;
trovato = true;
} catch (Exception e) {}

if (!trovato) try // O è string o è %
{
// Testi che finisca con %, se finisce con % provi il parseFloat, se fallisce è testo puro
// Sono di fretta, non riesco a finire ;)
} catch (Exception e) {}

gaglioppo
09-05-2006, 20:43
beh,per ora mi sto accontentando di qualcosa di simile a quello che mi segnala Pinok,
in realtà, però le istruzioni le metto direttamente nel catch, va bene o potrei avere problemi?

per ora mi riconosce tutto, anche
" 45,66% i.d." che è una stringa che ho trovato, è una percentuale ma c'è anche dell'altro.


grazie cmq per tutti gli interventi, vi ringrazio sempre poco per quel che fate.