Мне нужно обработать входной файл и скопировать его содержимое (строка ilne) в выходной файл. Однако в этом входном файле есть некоторые неважные данные (блуждающие), которые мне нужно пропустить.
Основная проблема, которую я пытаюсь решить, на самом деле более сложная, чем эта, но я просто собираюсь упростить задачу:
Итак, у меня есть входной файл, содержащий сотни тысяч строк.
Если во входном файле присутствует следующая последовательность из 3 строк:
A
B
С
тогда мне нужно пропустить эти 3 строки и перейти к следующей строке во входном файле. Я могу пропустить эти 3 строки, только если эти 3 строки представляют собой последовательность последовательных строк.
Например:
Входной файл:
A
A
B
C
B
P
A
B
С * * тысяча двадцать-один
A
B
A
A
B
C
A
Выходной файл:
A
B
P
A
B
A
A
Пояснение:
A
A (пропущено)
B (пропущено)
C (пропущено)
B
P
A (пропущено)
B (пропущено)
C (пропущено)
A
В
A
A (пропущено)
B (пропущено)
C (пропущено)
A
Обратите внимание, что я могу пропустить последовательность строк (A, B, C), только если они происходят последовательно. Все остальные строки, которые не пропущены, должны быть скопированы в выходной файл.
Если я использую BufferedReader.nextLine (), я не могу вернуться к предыдущим строкам, если следующая строка не соответствует шаблону ввода. Например, если я уже столкнулся с A, а следующая строка - это другая A (не B), я должен скопировать первый A в выходной файл и снова начать фильтрацию со второго A, который я не обработал, и проверьте следующую следующую строку и так далее.
Один из способов, который я могу придумать, - это сначала сохранить содержимое входного текстового файла, чтобы я мог легко вернуться при обходе содержимого входного файла, если он не соответствует шаблону, который я ищу. Однако это не решение для памяти. Есть ли какой-нибудь умный алгоритм для решения этой проблемы, предпочтительно за один раз, то есть O (N) сложность? Или, если это невозможно, что было бы наиболее оптимальным решением, которое по-прежнему связано с памятью? Некоторые примеры C / Java-кодов будут действительно полезны.