O quê eu entendi é o seguinte
VC:
1-> Tem um arquivo de texto com várias linhas onde
2-> Cada linha tem várias “palavras”.
3-> Vc precisa procurar, nas palavras pelos tokens <início> e
4-> checando linha a linha para procurá-los MAS
5-> se o programa não acha os dois na mesma linha cai em loop infinito.
Se for isso, o que vc tem que fazer é o seguinte:
A classe responsável pela leitura do arquivo texto deveria ser
LineNumberReader, pra vc fazer a leitura linha a linha de boua. Vc deveria criar um loop, do tipo
String linha = file1.readLine();
while(linha != null)
{
<código de tratamento>
linha = file1.readLine();
}
esse código de tratamento tem que atentar para os caracteres que te farão descartar as linhas lidas nesse meio tempo. pelo que deu pra entender, eles serão tokens, estando soltos no texto tranquilamente.
Pra procurar eles é só fazer mais ou menos o quê vc estava faznendo, mas vc deveria definir uma variável auxiliar. Uma vantagem da LineNumberReader é que ela permite contar as linhas que se leu. Esse número começa em 0 e aumenta a cada linha, e vc também pode especificar o número da linha. Isso não move o cursor, apenas altera o número da linha, assim, quando formos criar a sua LineNumberReader, vamos criar uma variável auxiliar para ajudar a não contar as linhas.
LineNumberReader file1 = new LineNumberReader(…);
int linenum = 0;
Aí, voltamos ao seu loop:
String linha = file1.readLine();
Boolean ignoring = false;
while(linha != null)
{
StringTokenizer tokens = new StringTokenizer(linha);
String tok = null;
while(tokens.hasMoreTokens())
{
tok = tokens.nextToken();
if(tok == && !ignoring)
{
ignoring = true;
linenum = file1.getLineNumber();
}
if(tok == && ignoring)
{
ignoring = false;
file1.setLineNumber(linenum);
}
}
linha = file1.readLine();
}
Qual a idéia desse loop?
Ele pega uma linha e começa a varrer procurando por um . Quando ele encontra um desse, armazena o número atual de linhas e liga um boolean, que o ajudará a ignorar outro caractere desse que ele possa encontrar antes de encontrar um . Quando ele acha o , o loop checa se o programa está ou não ignorando as linhas contadas, se estiver ele termina de ignorar, “desligando” o boolean e alterando o número da linha atual, para o daquela na qual ele parou de ignorar. Aí, é só recuperar o número de linhas efetivamente contadas usando um file1.getLineNumber quando terminar de passar o texto.