私は数字を一致させることができることを知っていますPattern.compile("\\d*");
ただし、長い最小値/最大値は処理しません。
例外に関連するパフォーマンスの問題については、本当に長い場合を除いて、longを解析しようとはしません。
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;
}
つまり、try / catchブロックは必要なく、通常のJavalongのサイズから外れた「564654954654464654654567879865132154778」のような長い間例外が発生したくないということです。
誰かがこの種のプリミティブJavaタイプの必要性を処理するパターンを持っていますか?JDKはそれを自動的に処理するための何かを提供しますか?Javaにフェイルセーフな構文解析メカニズムはありますか?
ありがとう
編集:「悪い長い文字列」は例外的なケースではないと想定してください。私はベンチマークを求めているのではなく、長くて何も表していない正規表現を求めています。正規表現チェックに必要な追加の時間を認識していますが、少なくとも私の長い構文解析は常に一定であり、「不良な長い文字列」の割合に依存することはありません。
リンクを再度見つけることはできませんが、StackOverflowに優れた解析ベンチマークがあります。これは、samsでコンパイルされた正規表現の再利用が非常に高速であり、例外をスローするよりもはるかに高速であるため、例外のしきい値が小さいとシステムが遅くなることを明確に示しています。追加の正規表現チェックよりも。