java.lang.ArrayIndexOutOfBoundsException: 4

estou lendo os dados de um arquivo txt, atribuindo cada dado a um atributo especifico de um objeto e cada linha a um objeto, esta funcionando normalmente, estou conseguindo adicionar e fazer tudo que preciso, porem como estou usando try catch consigo capturar a excepção e continuar rodando o programa, mas não sei se isso me gerará erros futuros.
Tenho essa excepção capturada :

excecao: java.lang.ArrayIndexOutOfBoundsException: 4

então aqui vai o método para importação

  public void importaCliente(){
    File arquivo = new File("C:\\Users\\itach\\Desktop\\CadastroCliente.txt");
  
    try {
        
    
        //Scanner, nesse exemplo vai fazer a leitura de um arquivo 
        // texto denominado exercicio.txt
        
        Scanner scanner = new Scanner(arquivo);
        
        // A leitura do arquivo será por linha

        
        while(scanner.hasNextLine()) {
            String s[];
            
            s =(scanner.nextLine().split(";")); // atribuo fim de uma string através do ; que esta também a cada atributo do meu txt
            
            DaoCliente dao = new DaoCliente();
         
                if(s[4].equalsIgnoreCase("J")){ // se a posicao 4(tipo) for J,o objeto instanciado é Pessoa Juridica
                    PessoaJuridica obj = new PessoaJuridica();
                    int codigo=Integer.parseInt(s[0]);
                    obj.setCodigo(codigo);
                    obj.setNome(s[1]);
                    obj.setEndereco(s[2]);
                    obj.setTelefone(s[3]);
                    obj.setTipo(s[4]);
                    obj.setCnpj(s[5]);
                    int ie=Integer.parseInt(s[6]);
                    obj.setIe(ie);
                    dao.salvarCliente(obj);
                }
                else if(s[4].equalsIgnoreCase("F")) {
                    PessoaFisica obj = new PessoaFisica();
                    int codigo=Integer.parseInt(s[0]);
                    obj.setCodigo(codigo);
                    obj.setNome(s[1]);
                    obj.setEndereco(s[2]);
                    obj.setTelefone(s[3]);
                    obj.setTipo(s[4]);
                    obj.setCpf(s[5]);
                    dao.salvarCliente(obj);
                   
                }
                    System.out.println(Dados.listaClientes);
           }
     
         
        }       
   
            
        catch(Exception e){
            
                System.out.println("excecao"+e);
                
                }
    
}

o metodo de salvar no arraylist é esse

  public void salvarCliente(Cliente obj){
  
        if(Dados.listaClientes.contains(obj)!= true)
        {
            Dados.listaClientes.add(obj);
        }
        else {
            System.out.println("impossivel adicionar");
        }
    }

só queria entender de onde vem esse estouro de array que esta acontecendo

Acho que vem dessa linha.

Faz ai pra testar e vê os valores que ele apresenta.

for (int i = 0; i < s.length; i++) {
     System.out.println("Indice: "+ i + " Valor: " + s[i]);
}

Coloca esse código antes do DaoCliente dao = new DaoCliente(); e olha o que é impresso no console

1 curtida

Indice: 0 Valor: 10
Indice: 1 Valor: Daniel
Indice: 2 Valor: ovidio vilela
Indice: 3 Valor: 993911490
Indice: 4 Valor: J
Indice: 5 Valor: 46353698895
Indice: 6 Valor: 151515
[10;Daniel;ovidio vilela;993911490;J;46353698895;151515;]
Indice: 0 Valor: 12
Indice: 1 Valor: Daniel
Indice: 2 Valor: ovidio vilela
Indice: 3 Valor: 9929595
Indice: 4 Valor: F
Indice: 5 Valor: 6565656
[10;Daniel;ovidio vilela;993911490;J;46353698895;151515;, 12;Daniel;ovidio vilela;9929595;F;6565656;]
Indice: 0 Valor: 10
Indice: 1 Valor: Daniel
Indice: 2 Valor: ovidio vilela
Indice: 3 Valor: 993911490
Indice: 4 Valor: F
Indice: 5 Valor: 46353698895
Indice: 6 Valor: 151515
impossivel adicionar – porque coloquei propositalmente um codigo ja existe para testar

fez a leitura corretamente pro primeiro valor que esta no txt