Saida do loop esta errado

2 respostas
hcbelias

eu fiz um loop com o while onde eu verifico linha a linha , se ha uma das substrings a seguir ":

’ ou “table” se houver eu saio do while…
o problema e que quando chega na linha:
“conditions intractable to adequate trials of conventional treatment”
ele sai do while…

o loop esta assim

while (!(linha.matches (".*"+"<h1>"+".*") | linha.matches (".*"+"<H1>"+".*") | linha.matches (".*"+"table"+".*") | linha.matches (".*"+"TABLE"+".*")))
            {
                saida=saida.trim ();
                saida=saida.concat (linha +" ");
                linha=br.readLine ();
                
            }

alguem pode me ajudar?

2 Respostas

_fs

Se você quer usar OR, deve utilizar o operador “||” e não “|”.

jonatascp

hcbelias,

Não entendi onde realmente tá o erro, pois não entendi qual linha dá o erro: “conditions intractable to adequate trials of conventional treatment”, se ainda não resolveu o problema e quiser melhorar a pergunta eu agradeço. Só uma observação sobre a resposta do LIPE, o erro não é porque tá “|” em vez de “||”, pois “||” e “&&” são chamados de curto circuito, quando utilizados poderá acontecer de uma segunda condição não ser avaliada. Exemplo:

int a = 0; int b = 0; if (++a == 1 | ++b == 1){ System.out.println("a = "+a); System.out.println("b = "+b); }

Será impresso “a = 1” e “b = 1”, pois mesmo a primeira condição sendo true, é avaliado também a segunda condição. Agora utilizando o curto circuito:

int a = 0; int b = 0; if (++a == 1 || ++b == 1){ System.out.println("a = "+a); System.out.println("b = "+b); }
Será impresso “a = 1” e “b = 0”, pois se caso a primeira condição seja true a segunda condição não será avaliada, pois independente de seu resultado será retornado true.

O mesmo se aplica a “&&”, no caso de if(false && false){}, a segunda não será avaliada, mais caso seja if(false&false){}, as duas sempre serão avaliadas.

Criado 24 de setembro de 2007
Ultima resposta 24 de set. de 2007
Respostas 2
Participantes 3