2015-07-02 5 views
1

I реализован следующий метод, который может быть использован для преобразования строки в допустимом формате:SimpleDateFormat попытаться разобрать, избежать пустой поймать блок

public static Date parseDate(final String dateString, final String[] acceptedFormats) { 
     for (String format : acceptedFormats) { 
      try { 
       return new SimpleDateFormat(format).parse(dateString); 
      } catch (ParseException e) { 
       // dateString does not have this format 
      } 
     } 
     return null; // dateString does not match any accepted format 
    } 

Как я прочитал от некоторых Java-книги, это s not a good practice to use exceptions to control the flow. In this case, I use an empty catch block and that не очень хорошая практика. Можете ли вы помочь мне написать метод, который делает то же самое, но по-другому? я должен отметить, что я не позволил использовать внешние LIBS (я знаю, что там Lib от apachee, который может сделать эту вещь в хорошем порядке)

ответ

0

Вы можете использовать перегрузку parse, которая принимает ParsePosition:

public static Date parseDate(final String dateString, final String[] acceptedFormats) { 
    ParsePosition position = new ParsePosition(0); 
    for (String format : acceptedFormats) { 
     // TODO: Specify time zone and locale 
     SimpleDateFormat sdf = new SimpleDateFormat(format); 
     Date date = format.parse(text, position); 
     if (date != null && position.getIndex() == text.length()) { 
      return date; 
     } 
     position.setIndex(0); 
    } 
    return null; // dateString does not match any accepted format 
} 

Отметьте чек, что позиция синтаксического анализа является длина строки - что предотвращает ложные срабатывания, где некоторые текста был проанализирован, но там еще осталось - такие, как формат «YYYY-MM -dd "и текст" 2015-07-02T15: 40 ".

Смежные вопросы