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

Mesmo com o "Locale.US" meus valores vieram com a vírgula no lugar do ponto

Antes do passo 15, de adicionar a referência ao idioma como sendo o Português, meus número já estavam vindo com "," ao invés de "." separando as casas decimais. Mesmo havendo uma referência mais acima para o "Locale.US". Por que isso acontece?

A referência de localidade que foi inserida anteriormente não é aplicada a formatação?

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

        Scanner scanner = new Scanner(new File("contas.csv"));

        while (scanner.hasNextLine()) {

            String linha =  scanner.nextLine();

            Scanner separaInformacao = new Scanner(linha);
            separaInformacao.useLocale(Locale.US);
            separaInformacao.useDelimiter(",");

            String tipoConta = separaInformacao.next();
            int agencia = separaInformacao.nextInt();
            int numero = separaInformacao.nextInt();
            String titular = separaInformacao.next();
            double saldo = separaInformacao.nextDouble();

            String informacaoFormatada = String.format("%s - %04d-%08d, %20s: %10.2f",
                    tipoConta, agencia, numero, titular, saldo);

            System.out.println(informacaoFormatada);

            separaInformacao.close();

        }

        scanner.close();
2 respostas
solução!

Ola Gabriel.

Veja que o Locate esta sendo indicado para a variavel Scanner, ou seja, ela esta fazendo a referencia a leitura do CSV. Na coluna saldo do CSV temos a divisao de decimal por ponto, entao padrao US. Dessa forma, não tem relação com a saída do System.out

Por padrão o java pega o locate do seu sistema para exibições. Mas caso voce queira mudar, pode ser feito por parametro do comando javac no console/terminal, ou então via codigo.

Exemplo, para fixar ao seu sistema que a linguagem dele é americano, coloca dentro do main (pode ser na primeira linha do main).

Locale.setDefault(new Locale("en", "US"));

Ou brasileiro mesmo (que no seu caso, parece já ser o padrão do sistema):

Locale.setDefault(new Locale("pt", "BR"));

Entendi. Muito obrigado pela explicação!