[RESOLVIDO] Pegar String de Arraylist

5 respostas
H

Pessoal… tenho uma classe que deve fazer o seguinte:

Tem um arraylist que recebe uma frase, mostra se alguma palavra da frase tem o “radical” _N junto dela, se tiver mostra a posição que ela está, mas depois de mostrar a posição dela não consigo mostrar o seu conteúdo.

package calculos;

import java.util.ArrayList;

public class Corpus {

Corpus() {
	
		 
		[color=green] //Armazenar todos os _N em uma lista[/color]
		 
	        ArrayList<Object> al = new ArrayList<Object>();
	        al.add("teste_N um_O array_P list_N para_I extrair_O valores_U");
	     		        
	        Iterator it = al.iterator();
	        
	        int index;
	        String str;
	        
	        for (int i = 0; i < al.size(); i++) {
	            str = (String)it.next();
	            index = str.indexOf("_N");
	            
	         if (al.contains(str)){
	        	 System.out.print("Sim, existe pelo menos um _N \n\n");
	         }
	         
	         System.out.print("Se existe um _N, em que posição ele está? \n\n");
	            
	            if (index > -1) {
	                System.out.println("Está na posição: " + index);
	                i = al.size();
	                
	                 String tst = (String) al.get(index);  
	                System.out.println("Está na posição: " + index);
	                	                
	               
	                
	            }
	            
	            
	        }
	
	}


}

[color=red]Saída:[/color]
Sim, existe pelo menos um _N

Se existe um _N, em que posição ele está?

Está na posição: 5

Exception in thread main java.lang.IndexOutOfBoundsException: Index: 5, Size: 1

at java.util.ArrayList.RangeCheck(Unknown Source)

at java.util.ArrayList.get(Unknown Source)

at calculos.Corpus.(Corpus.java:39)

at calculos.CPrincipal.main(CPrincipal.java:8)

Obrigado,
Abraços

5 Respostas

felipemartinsss

hugoramone:
Pessoal… tenho uma classe que deve fazer o seguinte:

Tem um arraylist que recebe uma frase, mostra se alguma palavra da frase tem o “radical” _N junto dela, se tiver mostra a posição que ela está, mas depois de mostrar a posição dela não consigo mostrar o seu conteúdo.

package calculos;

import java.util.ArrayList;

public class Corpus {

Corpus() {
	
		 
		[color=green] //Armazenar todos os _N em uma lista[/color]
		 
	        ArrayList<Object> al = new ArrayList<Object>();
	        al.add("teste_N um_O array_P list_N para_I extrair_O valores_U");
	     		        
	        Iterator it = al.iterator();
	        
	        int index;
	        String str;
	        
	        for (int i = 0; i < al.size(); i++) {
	            str = (String)it.next();
	            index = str.indexOf("_N");
	            
	         if (al.contains(str)){
	        	 System.out.print("Sim, existe pelo menos um _N \n\n");
	         }
	         
	         System.out.print("Se existe um _N, em que posição ele está? \n\n");
	            
	            if (index > -1) {
	                System.out.println("Está na posição: " + index);
	                i = al.size();
	                
	                 String tst = (String) al.get(index);  
	                System.out.println("Está na posição: " + index);
	                	                
	               
	                
	            }
	            
	            
	        }
	
	}


}

[color=red]Saída:[/color]
Sim, existe pelo menos um _N

Se existe um _N, em que posição ele está?

Está na posição: 5

Exception in thread main java.lang.IndexOutOfBoundsException: Index: 5, Size: 1

at java.util.ArrayList.RangeCheck(Unknown Source)

at java.util.ArrayList.get(Unknown Source)

at calculos.Corpus.(Corpus.java:39)

at calculos.CPrincipal.main(CPrincipal.java:8)

Obrigado,
Abraços

Voce errou nessa parte:

...
str = (String)it.next();
index = str.indexOf("_N");
...
String tst = (String) al.get(index);  
System.out.println("Está na posição: " + index);
...

Observe que quando chamou o método indexOf(String), o chamou em um objeto String, isso retorna a posição inicial
da primeira ocorrência de uma substring especificada. No caso, essa substring a ser buscada é “_N”.
E quando chamou o método get(int index), o fez em uma referência ArrayList, houve uma pequena confusão porque você tentou
acessar a posição que recebeu do indexOf, que se referia a String e suas posições e não ao ArrayList.
Recebeu a ArrayIndexOutOfBounds por ter acessado um índice inválido, já que só há 1 elemento em seu array e você tentou acessar
a posição 5.

H

Muito obrigado pela explicação!

Além de corrigir consegui entender o porque do erro, muito obrigado!

M

Só complementando: usar generics com <Object> é o mesmo que não usar. Se o seu List é de String, declare um List<String>. Isso evita possíveis erros de digitação/programação, evita casts, possíveis erros de runtime e deixa o código mais limpo.

E sempre que quiser colocar seu código aqui, use as tags “code”. Assim:

seu código aqui
M

Ah… e não custa nada colocar um [RESOLVIDO] no título do tópico quando não houver mais a dúvida (vá no primeiro tópico, escolha “editar” e mude o título).

H

obrigado Marco, desculpe, sou novato no fórum.

Criado 9 de fevereiro de 2010
Ultima resposta 9 de fev. de 2010
Respostas 5
Participantes 3