Erro ArrayIndexOutOfBoundsException (Collections)

Olá Javanese?!

O código abaixo:

class Song implements Comparable<Song>
{
	String title;
	String artist;
	String rating;
	String bpm;
	
	public int compareTo(Song s)
	{
		return title.compareTo(s.getTitle());
	}
	
	Song(String t, String a, String r, String b)
	{
		title = t;
		artist = a;
		rating = r;
		bpm = b;
	}
	
	public String getTitle()
	{ 
		return title;
	}
	
	public String getArtist()
	{
		return artist;
	}
	
	public String getRating()
	{
		return rating;
	}
	
	public String getBpm()
	{
		return bpm;
	}
	
	public String toString()
	{
		return title;
	}
}

e…

import java.util.*;
import java.io.*;

public class JukeBox3
{
	ArrayList<Song> songList = new ArrayList<Song>();
	public static void main(String [] args)
	{
		new JukeBox3().go();
	}
	
	public void go()
   {
      getSongs();
      System.out.println(songList);
      Collections.sort(songList);
      System.out.println(songList);
   }

   void getSongs()
   {
      try
      {
         File file = new File("SongListMore.txt");
         BufferedReader reader = new BufferedReader(new FileReader(file));
         String line = null;
         while((line = reader.readLine()) != null)
         {
            addSong(line);
         }
      }
      catch(Exception ex)
      {
         ex.printStackTrace();
      }
   }

   void addSong(String lineToParse)
   {
      String[] tokens = lineToParse.split("/");
      Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]);
      songList.add(nextSong);
   }
}

Da o seguinte erro:

java.lang.ArrayIndexOutOfBoundsException: 2
at JukeBox3.addSong(JukeBox3.java:41)
at JukeBox3.getSongs(JukeBox3.java:29)
at JukeBox3.go(JukeBox3.java:14)
at JukeBox3.main(JukeBox3.java:9)
[]
[]

Agora o contéudo do arquivo SongListMore.txt:

Pink Moon/Nick Drake
Somersault/Zero 7
Shiva Moon/Prem Joshua
Circles/BT
Deep Channel/Afro Celts
Passenger/Headmix
Listen/Tahit 80

Ou seja quero que mostra do jeito que esta e depois coloca em ordem alfabética.
Alguém pode me explicar o por que deste erro?

Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]);   

provavelmente o indice 2 não existe no seu array (tokens[2]).

       String[] tokens = lineToParse.split("/");  
       Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]); 

Mas sua linha só tem um “/”. Para o seu código funcionar, cada linha teria de ter pelo menos 3 “/”.

Olá, provavelmente vc está estudando o livro “Use a Cabeça! Java”

Complementando o que o thingol disse:
Quando for fazer o split, o array de Strings terá apenas 2 tokens, segundo seu arquivo SongListMore.txt. E quando tenta acessar tokens[2], o índice 2 está tentando acessar a terceira posição do array que não existe.
Aliás, se vc realmente estiver fazendo esse exercício do livro “Use a Cabeça! Java”, o conteúdo de SongListMore.txt não é esse, o que vc pôs no tópico é o do SongList, o conteúdo do SongListMore.txt está na página 374.
De qualquer maneira, para esse código funcionar, cada linha do arquivo deve estar assim:
Pink Moon/Nick Drake/5/80
Pink Moon = token[0]
Nick Drake = token[1]
5 = token[2]
80 = token[3]

Espero ter ajudado, abs.

Olá, Winthorp

Respondendo a sua pergunta é sim eu estou lendo o Use a Cabeça Java, Primeiro eu fiz uma leitura do livro sem fazer os exercícios e digitar os códigos, agora estou lendo novamente o livro a apenas digitando os códigos e compilando e rodando todos para um melhor entendimento, depois vou voltar a leitura e fazer os exercícios.

Admito, estou com dificuldade, mas o livro é bom e tenho o GUJ.
Sou iniciante e estou aprendendo a linguagem agora , gostaria de saber o que tenho que fazer mais para reforçar os meus estudos em Java, principalmente em Collections?

Abraços

Olá peresjuliao, sugiro que vc leia desde o começo o livro e faça os exercícios conforme vão aparecendo, dessa forma, vc vai avançando de nível e não comete enganos como ocorreu com a SongListMore.
Dê uma olhada no site da caelum e baixe a apostila fj11 que é legal tb.
Sobre collections, no livro tem um capítulo que aborda o assunto, mas como eu disse, estude os capítulos na ordem pra não “atropelar” nenhum assunto.
abs.

Obridago Winthorp