Похоже, что некоторые классы синтаксического анализатора уже используются, которые вы хотите использовать. В этом сценарии я бы написал декоратор для анализатора, который удаляет строки, не связанные с процессом, который вы отслеживаете.
Похоже, ваши классы могут выглядеть так:
abstract class Parser {
public abstract void parse( ... );
protected String readLine() { ... }
}
class SpecialPurposeParser extends Parser {
public void parse( ... ) {
// ... special stuff
readLine();
// ... more stuff
}
}
И я бы написал что-то вроде:
class SingleProcessReadingDecorator extends Parser {
private Parser parser;
private String processId;
public SingleProcessReadingDecorator( Parser parser, String processId ) {
this.parser = parser;
this.processId = processId;
}
public void parse( ... ) { parser.parse( ... ); }
public String readLine() {
String text = super.readLine();
if( /*text is for processId */ ) {
return text;
}
else {
//keep readLine'ing until you find the next line and then return it
return this.readLine();
}
}
Тогда любое вхождение, которое вы хотите изменить, будет использоваться так:
//old way
Parser parser = new SpecialPurposeParser();
//changes to
Parser parser = new SingleProcessReadingDecorator( new SpecialPurposeParser(), "process1234" );
Этот фрагмент кода является простым и неполным, но дает вам представление о том, как здесь может работать шаблон декоратора.