Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não consigo usar o pipe como separador.

Boa tarde, estou criando um código simples, apenas para consolidar melhor o conhecimento adquirido em aula, porém quando uso o pipe ( | ) como limitador o meu código não funciona, ele exibe o pipe normalmente, ao invés de usá-lo como separador, segue abaixo o código:

public class Program {

public static void main(String[] args) throws FileNotFoundException {

    Scanner scanner = new Scanner(new File("texto.txt"));

    String linha = scanner.nextLine();

    Scanner linhaScanner = new Scanner(linha);
    linhaScanner.useLocale(new Locale("pt", "BR"));
    linhaScanner.useDelimiter("|");

    String elemento = linhaScanner.next();
    System.out.print(elemento);

    for ( int i = 0; i < 5 ; i ++)
    {
        elemento = linhaScanner.next();
        System.out.print(elemento);

    }


        linhaScanner.close();

    scanner.close();

}

}

O arquivo que estou usando para teste contém apenas uma linha, sendo ela: 40|50|60|70|00|90

O resultado exibido é: 40|50|

Alguém poderia me ajudar?

2 respostas
solução!

Precisa fazer escape do pipe:

linhaScanner.useDelimiter("\\|");

Olá Paulo!

Isso acontece pois o useDelimiter pode aceitar tanto String quanto um padrão REGEX.

Quando usamos REGEX (expressões regulares) usamos alguns caracteres especiais:

( ) [ ] { { \ ^ $ | ? * + . < > - = !

Observe que a virgula não consta aqui, por isso o primeiro exemplo funcionou e o de pipe (barra vertical) não.

Para você corrigir isso basta usar um caractere de "escape" fazendo com que seu pipe não seja interpretado como uma expressão regular.

Para fazermos isso basta inserirmo duas barras invertidas na frente do operador, dessa forma:

linhaScanner.useDelimiter("\\|");

Espero que tenha ajudado.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software