У меня есть эта функция, которую я должен написать, которая возвращает Collection<String>
. Он имеет 3 параметра: LocalTime startDate
, LocalTime endDate
и Collection<String> logLines
. Я должен написать тело функции так, чтобы оно успешно находило и удаляло любые строки из журнала, которые не находятся в определенном таймфрейме, определяемом startDate
и endDate
, а затем возвращает этот журнал.Методы LocalTime возвращают целые числа, которые не имеют смысла
План, чтобы получить часы, минуты и секунды endDate
и startDate
использованием LocalTime
методов getHour()
, getMinute()
и getSecond()
и конвертировать в секундах, чтобы увидеть, сколько секунд прошло в начале срока, и сколько истекшее к концу таймфрейма. Затем я перебираю все строки в logLines
. Они находятся в формате: 2012-05-11T02:11:44Z This program did this operation successfully.
. Я разделяю каждую строку, чтобы получить первую часть строки и проанализировать ее, используя LocalTime.parse()
в формате ISO_DATE_TIME
, чтобы получить дату и сохранить ее в LocalTime logDate
. Наконец, я использую те же методы LocalTime
, перечисленные выше, чтобы получить общее количество секунд, прошедших до этого времени регистрации.
Проблема, которую я имею что когда я использую LocalTime
методы это хранящие все те же числа снова и снова независимо от того, что startDate
, endDate
или logDate
есть. Я никогда не использовал Java 8 или любую библиотеку Java до этого, поэтому я не могу придумать, почему и как это делается. Я знаю, что когда переданы startDate
и endDate
, они также являются строками в том же формате, что и дата журнала, с использованием LocalDate.parse()
и ISO_DATE_TIME
.
public Collection<String> search(Collection<String> logLines, LocalTime startDate, LocalTime endDate) {
// format date extracted from logLines to same format as startDate and endDate
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
// total seconds elapsed at startDate
// total seconds elapsed by endDate
int startSeconds = startDate.getHour() * 60 * 60;
startSeconds += startDate.getMinute() * 60;
startSeconds += startDate.getSecond();
int endSeconds = endDate.getHour() * 60 * 60;
endSeconds += endDate.getMinute() * 60;
endSeconds += endDate.getSecond();
// iterate through logLines
int i = 0;
for(String logLine : logLines) {
// array of strings to separate logLine into parts
String[] line = new String[2];
line = logLine.split("\t");
// localTime object to store extracted date from logLines
LocalTime logDate = LocalTime.parse(line[0], formatter);
// get seconds elapsed from logDate
int logDateSeconds = logDate.getHour() * 60 * 60;
logDateSeconds += logDate.getMinute() * 60;
logDateSeconds += logDate.getSecond();
// print amount of seconds to console
System.out.print(logDateSeconds);
System.out.print(" ");
System.out.print(startSeconds);
System.out.print(" ");
System.out.print(endSeconds);
System.out.print("\n");
if (logDateSeconds > endSeconds || logDateSeconds < startSeconds) {
logLines.remove(i);
i--;
}
i++;
}
return logLines;
}
Когда я распечатать startSeconds
, endSeconds
и logDateSeconds
к консоли я получаю
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
12114 12116 12122
независимо от того, какие входы.
Просьба указать мне в правильном направлении.
Пример ввода:
logLines
содержит
2012-05-11T02:11:44Z This program did this operation successfully.
2012-05-11T02:12:52Z This program did this operation successfully.
2012-05-11T02:14:17Z This program did this operation successfully.
2012-05-11T02:18:02Z This program did this operation successfully.
2012-05-11T02:20:30Z This program did this operation successfully.
startDate = 02:11:44
и endDate = 02:19:57
Вы создаете новый массив без причины. Просто выполните 'String [] line = logLine.split (" \ t ");'. – shmosel
так что 'startSeconds' и' endSeconds' не будут меняться, поэтому единственной относительной частью вашего кода является 'LocalTime logDate = LocalTime.parse (строка [0], formatter);' - какой вход? –
Так я и делал это раньше, но не подозревал, что это могло вызвать проблему, которую я изменил. – kohai