Как избежать исключения Array Out of Bound в Java

java.time

Ответ MadProgrammer верен, особенно отзыв о Joda-Time . Преемник Joda-Time теперь встроен в Java 8 в качестве нового пакета java.time . Вот пример кода в Java 8.

При работе с датой (в отличие от локальной даты) часовой пояс в критическом состоянии. День месяца зависит от часового пояса. Например, часовой пояс в Индии равен +05:30 (пять с половиной часов до UTC), а Франция - всего на час вперед. Итак, момент в новый день в Индии имеет одну дату, а тот же момент во Франции имеет «вчерашнюю» дату. Создание строкового вывода без какой-либо временной зоны или информации о смещении создает двусмысленность. Вы просили вывести YYYY-MM-DD, поэтому я предоставил, но я не рекомендую его. Вместо ISO_LOCAL_DATE я бы использовал ISO_DATE , чтобы получить этот вывод: 2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

Dump to console ...

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

При запуске ...

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

Joda-Time

Аналогичный код с использованием библиотеки Joda-Time , предшественника java.time.

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

Кстати, этот формат вашей входной строки является стандартным форматом, одним из нескольких удобных форматов строк даты и времени, определенных ISO 8601 .

Как Joda-Time, так и java.time используют ISO 8601 форматы по умолчанию при разборе и генерации строковых представлений различных значений даты и времени.

0
задан R.A 15 January 2019 в 17:15
поделиться

1 ответ

Самое главное - структурировать код, имея 4 вложенных цикла, просто безумие. Попробуйте написать какую-нибудь функцию с хорошим описанием того, что они делают, и не имеют более двух циклов внутри друг друга.

На ваш вопрос, у вас есть if (tokensList.get(e), в то время как e установлен как int e = i - 2, и поскольку i изначально начинается как int i = 0, то вы можете проверить -2 или -1. То же самое касается верхней границы, у вас есть e < i + 4, что на +4 больше, чем размер вашего списка.

0
ответ дан libik 15 January 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: