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

Como pular a proxima linha do scanner

meu CSV tem valores nulos, isso e um baita problema na hora de fazer um parsing. pra isso vou ter que fazer um if para setar ou nao o valor do csv no objeto. Porem pra dar certo precisaria pular uma linha no scanner

6 respostas

Mostra o seu código, para termos uma ideia melhor.

package br.edu.easyChemistry;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Scanner;

public class Tabela implements Serializable {
    private static final long serialVersionUID = 1L;


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

        Elemento elemento = new Elemento();
        List<Elemento> elementos = new ArrayList<>();
        Scanner scanner = new Scanner(new File("data.csv"));
        while(scanner.hasNextLine()) {
            String linha = scanner.nextLine();
            Scanner linhaScanner = new Scanner(linha);

            linhaScanner.useDelimiter(",");
            linhaScanner.useLocale(Locale.US);
            elemento.setAtomicNumber(Integer.parseInt(linhaScanner.next()));
            elemento.setSymbol(linhaScanner.next());
            elemento.setName(linhaScanner.next());
            elemento.setAtomicMass(linhaScanner.next());
            elemento.setCpkHexColor(linhaScanner.next());
            elemento.setElectronicConfiguration(linhaScanner.next());

            elemento.setElectronegativity(Double.parseDouble(linhaScanner.next()));

            elemento.setAtomicRadius(Integer.parseInt(linhaScanner.next()));
            elemento.setIonRadius(linhaScanner.next());
            elemento.setVanDelWaalsRadius(Integer.parseInt((linhaScanner.next())));
            elemento.setIonizationEnergy(Integer.parseInt((linhaScanner.next())));
            elemento.setElectronAffinity(Double.parseDouble((linhaScanner.next())));
            elemento.setOxidationStates((linhaScanner.next()));
            elemento.setStandardState((linhaScanner.next()));
            elemento.setBondingType((linhaScanner.next()));
            elemento.setMeltingPoint(Integer.parseInt((linhaScanner.next())));
            elemento.setBoilingPoint(Integer.parseInt((linhaScanner.next())));
            elemento.setDensity(Double.parseDouble((linhaScanner.next())));
            elemento.setGroupBlock((linhaScanner.next()));
            elemento.setYearDiscovered(Integer.parseInt((linhaScanner.next())));
            System.out.println("asdfsdkjblkfb");
            elementos.add(elemento);
            linhaScanner.close();

        }
    scanner.close();
    System.out.println(elementos);
    }


}

Em cada set, podem haver valores nulos.

Então se um valor for nulo, você não deseja usar set nele, é isso?

isso. ou alguma forma de fazer parsing de string nula pra outros tipos primitivos. Caso não tenha, vou precisar fazer um if e colocar um pula linha pra não pegar aquele campo.

solução!

Acredito que não é necessário pular a linha.

Você pode colocar uma verificação de null nos métodos set.

Ex.: public void setAtomicMass(String mass) { if (mass == null) { mass = "0"; } this.mass = mass; }

isso funciona mesmo, valeu

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