Repetição dentro de uma String

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;
}

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!

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+

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

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

[code]
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();

}[/code]

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

Até mais!

Valeu pessoal!

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

Obrigada!