파일 이름 및 지정된 날짜에 마지막으로 수정 된 시간의 로그를보고 있습니다. 내용은 다음과 같습니다.하위 문자열 내 하위 문자열 정렬
(comment:file_02389.txt,lastmodified:Wed Oct 10 19:10:49)
(comment:file_02342.txt,lastmodified:Wed Oct 10 17:16:08)
(comment:file_02315.txt,lastmodified:Wed Oct 10 18:45:12)
(comment:file_02344.txt,lastmodified:Wed Oct 10 08:31:01)
로그는 줄 바꿈없이 단일 문자열로 제공됩니다. 가장 최근에 수정 된 파일을 찾으려면 String을 구문 분석하고 싶습니다. 즉, 최근 날짜가 있으므로이 경우 file_02389.txt입니다. 가상 파일은 미래에 변경 될 수 있지만 동일한 파일이 두 번 이상 수정되면 파일 이름이 고유하지는 않지만 각 "주석"의 문자 길이는 일정합니다.
가장 확장 성이 뛰어나고 유지 관리가 쉬운 최신 파일을 찾는 방법이 있습니까? 실행 시간과 기억은 중요한 요소가 아닙니다. 주요 관심사는 초보 프로그래머가 코드를 이해하고 작업 할 수 있다는 것입니다.
제 생각에는 사용자 지정 Comparator로 정렬 할 수있는 List로 문자열을 분할하는 것이 었습니다. 나는이 단순하지만 확장되지이라고 생각 :
그것은 작동하지만 선 길이이 하나의 경우에만 유용하다 비교기에 따라 문자열을 사용{//given String log
...
//setup
List<String> temp = Arrays.asList(log.trim().split("\\(comment\\:")); //too complex for one line?
//the first entry is blank so it must be removed else a substring() call will fail
if(temp.get(0).equals(""))
temp.remove(0);
int period = full.get(0).indexOf('.');
int colon = full.get(0).indexOf(':');
//process
Collections.sort(temp, DATE);
return test.get(test.size()-1).substring(0, period)) //last entry is the most recent
}
public final Comparator<String> DATE = new Comparator<String>()
{
public int compare(String s1, String s2)
{
return s1.substring(28).compareTo(s2.substring(28));
}
};
. 나는 .split의 사용을 싫어하고 첫 번째 항목을 제거해야하지만 그 대안 인 경우 정규 표현식을 이해하기가 어렵지 않습니다. 정수 또는 날짜 객체로 비교하는 대신 문자열을 날짜로 처리하는 것은 바람직하지 않지만 코드 줄을 저장합니다.
현재 임의적으로 보이는 숫자가있는 일회용 비교기를 만들지 않는 정렬 된지도를 사용하고 있지만 특수한지도는 내가하려는 것을 다소 복잡하게 보입니다. 나는 여전히 파일 이름에 대해 하나의 배열을 만드는 것, 시간에 대해 또 하나의 배열을 만드는 것, 시간 배열을 정렬 할 수 있도록 세 번째로 시간 배열을 정렬 할 수 있으며 사본의 해당 인덱스와 비교하여 마지막 값을 비교하는 것이 낫다고 생각합니다.
{
...
//same setup as before
//process
//key is time, value is file name
SortedMap<String, String> map = new TreeMap<String, String>();
for(String s : temp)
map.put(s.substring(colon+1), s.substring(0, period));
//the value to which the last key is mapped is guaranteed to be the most recent file
return map.get(map.lastKey()); //too complex for one line?
}
예를 들어 10 월 10 일이 모두 월입니다. 및 수요일. - 불가능합니다 ... 둘째 - 문자열 비교를 사용하여 날짜 비교 - 작동하지 않아야합니다. – alfasin
오타가 내 부분에서 월요일을 수요일로 변경했습니다. 감사합니다. 비교는 날짜가 문자열로 처리되기 때문에 효과가 있습니다. 'Wed Oct 10 19 : 10 : 49'은 'Wed Oct 10 17 : 16 : 08'보다 더 많이 반환됩니다. 왜냐하면 '9'는 '7'보다 많기 때문입니다. 분명히 형식이 일관되고 날짜가 _how much_> 또는 일 때만 사용됩니다. –
apcris
Nope. 다른 요일을 비교하기 시작할 때까지 유지됩니다. W> T 그러므로 당신은 그 Wend를 얻을 것이다. > 목. – alfasin