文字列が日付を表すかどうかを確認するための効率的な方法はありますか?

コスタスThanasis:

私はいくつかの特定の形式のTXTを与えられています。フォーマットが始まることになっているDD / MM / UUUUしかし、私はそれが実際にこの特定のフォーマットであるか、そうでなければ私のコードが壊れるかどうかを確認したいと思います。

今、私の考えでは、特定の(区切り文字付き)10の最初の文字がLOCALDATEオブジェクトを定義することができるかどうかを確認することでした。だから私はこの思い付きました:

public boolean isDate(String date) {

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
    LocalDate ld = null;
    try {
        ld = LocalDate.parse(date, formatter);
        System.out.println(ld);
    } catch (DateTimeParseException e) {
        System.out.println("Date " + date + " is not a date.");
        return false;

    }

    return true;
}

しかし、これはない、私は例外を除いて、プログラムの開発フローをcontrolingていますので、ベストプラクティス。プラス私は私のコードは、トライキャッチでいっぱいになります..だから、時間などを表現するために、別の8つのフィールドをチェックする必要があります。この周りに行くために、よりeffecient方法はありますか?

富:

問題のコードで何も間違っているがあります。それははっきりと読みやすいですし、明らかなパフォーマンスの問題はありません(あなたはキャッシュできDateTimeFormatter、あなたがしたい場合、それは違いをすることはありません)。例外はyurとして大幅な性能は、いずれかのヒットはありません述べました

これは例外で制御フローのケースではありません。それが日付だならば、あなたが知ることができる唯一の方法は、それを解析することです。そうでない場合、パーサーは例外をスローします。そこにはありませんLocalDate.tryParse()が、あった場合、それは問題のコードのようになります。

これは、いくつかのものは過去に本当の問題(例えばされてきたが、「私は仮定の下にあった/聞いた」の場合であるが遅い同期)、通常、彼らは時代遅れのJava 10年以上前からのバージョンに基づいているか、問題間違った方法(例えば、例外/制御フロー)で理解されています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=333128&siteId=1