Я пишу синтаксический анализатор для файлов, которые выглядят следующим образом:Чтение вперед с BufferedReader (Java)
LOCUS SCU49845 5028 bp DNA PLN 21-JUN-1999
DEFINITION Saccharomyces cerevisiae TCP1-beta gene, partial cds, and Axl2p
(AXL2) and Rev7p (REV7) genes, complete cds.
ACCESSION U49845
VERSION U49845.1 GI:1293613
Я хочу, чтобы получить информацию предшествуют определенные теги (определение, версия и т.д.), но охватывают некоторые описания несколько строк, и мне нужно все это. Это проблема при использовании BufferdReader для чтения моего файла. Я почти понял это с помощью меток() и reset(), но при выполнении моей программы я заметил, что он работает только для одного тега, а другие теги каким-то образом пропускаются. Это код, который я до сих пор:
Pattern pTag = Pattern.compile("^[A-Z]{2,}");//regex: 2 or more uppercase letters is a tag
Matcher mTagCurr = pTag.matcher(line);
if (mTagCurr.find()) {
reader.mark(1000);
String nextLine = reader.readLine();
Matcher mTagNext = pTag.matcher(nextLine);
if (mTagNext.find()){
reader.reset();
continue;
}
Pattern pWhite = Pattern.compile("^\\s{6,}");
Matcher mWhite = pWhite.matcher(nextLine);
while (mWhite.find()) {
line = line.concat(nextLine);
}
System.out.println(line);
}
Этот фрагмент кода должен найти теги и сцепить описания, которые охватывают более чем одну строку. Некоторые ответы, которые я нашел здесь, советуют использовать сканер. Это не вариант для меня. Файлы, с которыми я работаю, могут быть очень большими (наибольший из которых я столкнулся> 50 ГБ), и используя BufferedReader, я хочу уменьшить нагрузку на свою систему.