So che posso abbinare i numeri con Pattern.compile("\\d*");
Come abbinare un lungo con regex Java?
Ma non gestisce i valori lunghi min/max.
Per problemi di esecuzione relativi alle eccezioni, non voglio provare a analizzare il lungo, a meno che non sia davvero lungo.
if (LONG_PATTERN.matcher(timestampStr).matches()) {
long timeStamp = Long.parseLong(timestampStr);
return new Date(timeStamp);
} else {
LOGGER.error("Can't convert " + timestampStr + " to a Date because it is not a timestamp! -> ");
return null;
}
Voglio dire che non voglio alcun blocco try/catch e io non voglio arrivare eccezioni sollevate a lungo come "564654954654464654654567879865132154778", che è fuori dalla dimensione di un Java regolare lungo.
Qualcuno ha un modello per gestire questo tipo di necessità per i tipi di java primitivi? Il JDK fornisce qualcosa per gestirlo automaticamente? Esiste un meccanismo di parsing sicuro in Java?
Grazie
Edit: Si prega di supporre che la "lunga stringa cattivo" non è un caso straordinariamente disponibile. Non sto chiedendo un punto di riferimento, sono qui per una regex che rappresenta un lungo e niente di più. Sono consapevole del tempo aggiuntivo richiesto dal controllo regex, ma almeno il mio lungo parsing sarà sempre costante e non dipenderà mai dalla% di "stringhe lunghe errate"
Non riesco a trovare di nuovo il collegamento ma c'è un buon benchmark di parsing su StackOverflow che mostra chiaramente che riutilizzare la regex compilata con sams è molto veloce, molto più veloce dell'eccezione, quindi solo una piccola soglia di eccezioni renderebbe il sistema più lento rispetto al controllo regex aggiuntivo.
Si noti che '" \\ d * "' corrisponde anche alle stringhe vuote. –
Forse [la tua domanda è già stata posta] (http://stackoverflow.com/questions/2563608/check-whether-a-string-is-parsable-into-long-without-try-catch). A mio parere, le eccezioni saranno più veloci delle espressioni regolari. – Sorrow
@Sorrow: buona presa sulla domanda precedente. Re eccezioni rispetto alle espressioni regolari: cosa ti fa pensare? Le eccezioni di lancio non sono un processo rapido. Una volta compilate, le espressioni regolari sono piuttosto veloci. –