Pesquisa em arquivo .txt e retornar o que está após "REF="?

Oi a todos, estou com um problema e gostaria de importar algumas informações de dentro de um arquivo txt onde preciso pegar o que está após REF=blablabla, encontrei a forma abaixo mas ela pega o que está entre o trecho citado.

public static void main(String[] args) throws FileNotFoundException, IOException 
{
    BufferedReader arquivo;   
    arquivo = new BufferedReader(new FileReader("G:\\teste.txt"));
    while(arquivo.ready()) 
    {
        String linha = arquivo.readLine();        
        String msg;       
        msg = linha.substring(linha.indexOf("REF=") + "REF=".length(), linha.indexOf("ref="));
       JOptionPane.showMessageDialog(null, "" + msg, "", JOptionPane.INFORMATION_MESSAGE);       
    }
}

ele encontra o trecho que quero mas somente se este estiver entre duas referencias, tipo REF= blablabla SIS=. preciso pegar o que esta depois de REF= e esse mesmo trecho se repete em outras partes do txt?

Algo desse tipo?

public static List<String> ref(String arquivo) throws Exception {
	List<String> lista = new ArrayList<>();

	BufferedReader bR = new BufferedReader(new FileReader(arquivo));

	String linha;

	while ((linha = bR.readLine()) != null) {
		if (linha.indexOf("REF=") != -1 && linha.contains("SYS=")) {
			String ref = linha.substring(linha.indexOf("REF=") + 4, linha.indexOf("SYS="));
			lista.add(ref);
		}else if (linha.indexOf("REF=") != -1){
			String ref = linha.substring(linha.indexOf("REF=") + 4);
			lista.add(ref);
		}
	}

	bR.close();

	return lista;
}

Oi Julio, obrigado por responder. ele vai achar “REF=” da linha que tenha “SYS” é isso?
Eu gostaria que ele procurasse a linha que tenha REF= e retornasse o restante da linha após REF=, porem com aquele meu ali ele só pega o que esta entre as duas referências mas eu quero só quero a palavra que esta depois do ref, porem ela vai variar de tamanho.

Não vi nenhum “SYS=” nesse código, então acho que seu programa não se importa com “SYS=”.

E se você fizer:

msg = linha.substring(linha.indexOf("REF=") + "REF=".length(), linha.length());

Isto deverá pegar todo o restante da Linha do arquivo após o “REF=”.

valeu pela dica vou tentar.

Douglas está certo, ele pega todo o restante mas eu pega todas as linha e eu queria que ele pegasse somente onde tem REF=, ele procurar no txt todo e pular as linhas vazias.

Fácil, coloca uma condição if:

public static void main(String[] args) throws FileNotFoundException, IOException 
	{
		BufferedReader arquivo = new BufferedReader(new FileReader("G:\\teste.txt"));
		while(arquivo.ready()) 
		{
			String linha = arquivo.readLine();        
			String msg;    
			if (linha.contains("REF=")) 
			{
				msg = linha.substring(linha.indexOf("REF=") + "REF=".length(), linha.length());
				JOptionPane.showMessageDialog(null, "" + msg, "", JOptionPane.INFORMATION_MESSAGE);       
			}

		}
		arquivo.close();
	}

Ele vai ou copiar a linha toda do ref= em frente ou copiar do ref= em frente até onde o sys= começa.

Ainda n pude testar mas de já muito obrigado.

Muito Obrigado a todos que me ajudaram, consegui entender bem como fazer, agora tenho só uma duvida. Da pra ele ler e pegar apenas um do que está repetido tipo.

no txt está:

joão
maria
joão
marcos
alice
maria
alex
felix

e ele retornar só me retornar um dos casos repetidos.
De já obrigado.

Dentro do while quando ele encontrar um linha, vc armazena o valor em uma lista e vai comparando se a lista contem o texto, se sim você pula esse valor repetido.

1 curtida

Obrigado pela luz Julio, vou testar aqui.