Repetição dentro de uma String

6 respostas
M

Olá!

Estou tentando percorrer uma String que possui elementos separados por vírgula (exemplo: 10,11,10,05,34,23,21,11) e, criar uma nova String sem as repetições com apenas uma ocorrência de cada número.

Tentei fazer através do código mas não estou percorrendo a lista toda. Antes estava recebendo um indexoutofboundsexception… depois alterei e agora não percorre a string toda.

Alguma sugestão?
[]s
MariLu

private String limparRepeticoes(String categorias) {

String retorno = “”;

int length = categorias.length();

for (int i = 0; i < length; i = i + 3) {

if (i + 3 < length) {

String aux = categorias.substring(i, i+3);

if (categorias.indexOf(aux) >= 0) {

continue;

}

else {

retorno += aux;

}

}

}

return retorno;

}

6 Respostas

cassio

o problema é esse seu i+3 …
dependendo do numero de caracteres na sua string, nao vai comparar mesmo…
ou pode ate dar ArrayIndexOutOfBounds Exception…

Faz diferente:

//separa as substrings a partir das virgulas e retorna tudo em um vetor
String separadas = categorias.split(",");
//retire as duplicatas...
//seu código aqui...

//reconstrua a string
String retorno = "";
for(int i = 0; i < separadas.length; i++){
   if(i != length - 1)
      retorno += separadas[i] + ",";
   else retorno += separadas[i];
}

Abraço!

diego2005

Você pode usar o método charAt da classe String pra pegar caractere por caractere, por exemplo:

String str = new String("Java"); for(int i = 0; i < str.length(); i++) System.out.println(str.charAt(i));

Qualquer dúvida poste aqui de novo…T+

M

Estou usando java 1.3… o split não existe nesta versão…

Calvin

Você não acha que ta na hora de dar uma atualizada?! pelo menos para a versão 1.4! :wink:

davidbuzatto
import java.util.*;

public String limparRepeticoes( String categorias ) {

    StringBuffer sb = new StringBuffer();
    ArrayList lista = new ArrayList();
    StringTokenizer st = new StringTokenizer( categorias, "," );
    String token = "";

    while( st.hasMoreTokens() ) {

        token = st.nextToken();

        if ( !lista.contains( token ) )
            lista.add( token );

    }
    
    // reconstrói a string
    for ( int i = 0; i < lista.size() - 1; i++ ) {
        sb.append( ( String ) lista.get( i ) + "," );
    }
    sb.append( ( String ) lista.get( lista.size() -1 ) );

    return sb.toString();

}

Dá para melhorar, usar um hashset etc etc etc.

Até mais!

M

Valeu pessoal!

Me ajudaram bastante… acabei aplicando a sugestão do davidbuzatto.

Obrigada!

Criado 18 de setembro de 2006
Ultima resposta 18 de set. de 2006
Respostas 6
Participantes 5