Exception in thread "main" java.lang.NumberFormatException: For input string: "0 Epic"

2 respostas
S

oi pessoal, preciso da vossa ajuda, o meu arquivo esta delimitado por “:” , no entanto eu quero que quando encontre uma nova linhga, comece a a fazer o scanner novamente, porque cada linha representa uma musica. estou tendo o segunte erro:Exception in thread “main” java.lang.NumberFormatException: For input string: “0 Epic”

class Musica{
    String titulo;
    Integer id_interprete, ano, id_genero, posicao;
  }
class interprete{
    int id;
    String nome;
}
public class Projecto_Algoritmia {

    /**
     * @param args the command line arguments
     */
    
    public static void main(String[] args) {
        // TODO code application logic here
        String id_inteprete, ano, id_genero, posicao;
        String nomeFicheiro = "musicas.txt";
        try {
            Scanner scanner = new Scanner(new FileReader("musicas.txt"))
                       .useDelimiter(" : ");
while (scanner.hasNext()) {
    Musica musica= new Musica();
  musica.titulo = scanner.next();
 id_inteprete =scanner.next();
 ano = scanner.next();
 id_genero= scanner.next();
 posicao = scanner.next();
 musica.id_interprete=(Integer.parseInt(id_inteprete));
 musica.ano=(Integer.parseInt(ano));
 musica.id_genero=(Integer.parseInt(id_genero));
 musica.posicao=(Integer.parseInt(posicao));

  
  System.out.println(musica.titulo+" "+musica.id_interprete+" "+musica.ano+" "+musica.id_genero+" "+musica.posicao);
}
scanner.close();
}

e o ficheiro e:

Amar pelos dois : 0 : 2017 : 1 : 0
Epic : 5 : 1990 : 3 : 1
The Rockafeller Skank : 6 : 1998 : 6 : 12
I Think Im Paranoid : 3 : 1998 : 3 : 3
O meu coracao nao tem cor : 12 : 1996 : 7 : 4
Boulevard of Broken Dreams : 9 : 2004 : 3 : 8
Chamar a musica : 11 : 1996 : 7 : 6
From Here to Eternity : 1 : 1977 : 6 : 2
Racer : 1 : 2013 : 6 : 5
Get Lucky : 13 : 2013 : 6 : 7
Take my breath away : 10 : 1986 : 2 : 9
Nightcall : 7 : 2010 : 6 : 10
Danger Zone : 4 : 1986 : 7 : 11
Nothing Compares 2U : 2 : 1990 : 2 : 13
Ch-Check it Out : 14 : 2004 : 7 : 14
Best of My Love : 18 : 1977 : 7 : 16
Hooked on a Feeling : 20 : 1974 : 2 : 18
Rolling in the deep : 17 : 2010 : 7 : 15
Cold as Ice : 8 : 1977 : 3 : 19
Best of My Love : 19 : 1974 : 3 : 17

conto com a vossa ajuda .

2 Respostas

G

O Scanner, neste caso, vai pegar a informação até encontrar o delimitador " : ", então quando chegar ao 0 da primeira linha ele não vai parar, ele só vai parar na próxima linha que ele encontrar o delimitador, ou seja, vai ler “0 Epic”, e quando encontrar o " : " o Scanner inicia uma nova informação.

Minha sugestão é ler cada linha e dividi-la em cada uma das informações da Musica, por exemplo:

public class ProjetoAlgoritmia {
	public static void main(String args[]) {
		try {
			Scanner scanner = new Scanner(new FileReader("musicas.txt"));
			
			while(scanner.hasNext()) {
				String linha = scanner.nextLine(); // Lendo toda a linha de uma vez (o delimitador será o caracter de nova linha "\n")
				String pedacos[] = linha.split(" : "); // Dividindo cada pedaço da linha pelo delimitador " : " 
				
				String titulo = pedacos[0]; // O primeiro pedaço é o titulo
				int idInterprete = Integer.parseInt(pedacos[1]); // O segundo é o id do interprete...
				int ano = Integer.parseInt(pedacos[2]);
				int idGenero = Integer.parseInt(pedacos[3]);
				int posicao = Integer.parseInt(pedacos[4]);
				
				Musica musica = new Musica(titulo, idInterprete, ano, idGenero, posicao); // Construindo o objeto com os pedaços
				
				System.out.println("-----------------------------------------------------");
				System.out.println("Dados da Musica:\n" 
											+ "\nTitulo: " + musica.getTitulo()
											+ "\nId Interprete: " + musica.getIdInterprete()
											+ "\nAno: " + musica.getAno()
											+ "\nId do Genero: " + musica.getIdGenero()
											+ "\nPosicao: " + musica.getPosicao());
				System.out.println("-----------------------------------------------------");
			}
			
			scanner.close();
		} catch(FileNotFoundException fnfe) {
			System.out.println("Nao foi possivel encontrar o arquivo");
		}		
	}
}

Classe Musica:

public class Musica {
	private String titulo;
	
	int idInterprete,
		ano,
		idGenero,
		posicao;
	public Musica(String titulo, int idInterprete, int ano, int idGenero, int posicao) {
		this.titulo = titulo;
		this.idInterprete = idInterprete;
		this.ano = ano;
		this.idGenero = idGenero;
		this.posicao = posicao;
	}
	
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public int getIdInterprete() {
		return idInterprete;
	}
	public void setIdInterprete(int idInterprete) {
		this.idInterprete = idInterprete;
	}
	public int getAno() {
		return ano;
	}
	public void setAno(int ano) {
		this.ano = ano;
	}
	public int getIdGenero() {
		return idGenero;
	}
	public void setIdGenero(int idGenero) {
		this.idGenero = idGenero;
	}
	public int getPosicao() {
		return posicao;
	}
	public void setPosicao(int posicao) {
		this.posicao = posicao;
	}
}
S

valeu

Criado 23 de junho de 2017
Ultima resposta 25 de jun. de 2017
Respostas 2
Participantes 2