Retirar String repetidas de um Array

Como que eu faço pra retirar um String repetida de um array ? por exemplo tenho um array {“brasil”,“java”,“obama”,“brasil”}
da ele retirar os repetidos e imprimir o resto! no caso deletaria o brasil !
alguem tem alguma ideia ?

transforma seu array em um Set, por exemplo HashSet…
a interface Set não permite elementos repetidos…
da uma pesquisada aki no forum…
segue o link da api java.sun.com/j2se/1.5.0/docs/api/java/util/Set.html

Abçs

Bom num sei se seria a melhor forma, mais vc poderia passar o seu arrray em HashSet que não aceita repitidos e depois caso vc realmente queira o array, tem um metodo toArray() que te retorna seu array sem repitidos
Abraços

Galera,

Pelo que eu entendi o que ele quer é ter como entrada um array assim {“brasil”,“java”,“obama”,“brasil”} e ter como saída um array assim ô: {“java”,“obama”}. Se for isso segue o código abaixo:

[code]import java.util.Arrays;

public class SemRepeticao {

public static String[] subst(String[] array) {
	
	Arrays.sort(array);
	String[] lista = new String[array.length];
	
	// parte central do algoritmo
	int j = 0;
	for (int i = 0; i < array.length; i++) {
	      if ((i > 0) && (array[i] == array[i - 1])) continue;
	      if ((i < array.length - 1) && (array[i] == array[i + 1])) continue;
	      lista[j++] = array[i];		      		      
	}
	
	// se tinha elementos repetidos
	if (j != array.length){
		String[] newLista = new String[j];
		System.arraycopy(lista, 0, newLista, 0, j);
		return newLista;
	}

	return lista;
}  

public static void main(String[] args) {
	String[] lista = subst(new String[]{"brasil", "java", "obama", "brasil"});
	for (String dado : lista) {
		System.out.print(dado + " ");
	}
}

}[/code]

Simplificando:

[code]public static String[] removeRepetitions( String[] strArray ) {

List< String > list = new ArrayList< String >();
int c;

for ( String si : strArray ) {
    c = 0;
    for ( String sj : strArray ) {
        if ( sj.equals( si ) ) {
            if ( ++c > 1 ) {
                break;
            }
        }
    }
    if ( c == 1 ) {
        list.add( si );
    }
}

return list.toArray( new String[0] );

}[/code]

vlw de acordo com o post do davidbuzatto, eu alterei e montei meu propio algoritmo!!

	public static String[] retiraRepetidos(String[] array) { 
		Arrays.sort(array);
		String[] lista = new String[array.length];
		int j = 0;
		for (int i = 0; i < array.length; i++) {  
			if ((i > 0) && (array[i].equals(array[i - 1])) && (array[i].equals(array[i + 1]))) continue;
			if ((i < array.length - 2) && (array[i].equals(array[i + 2]))) continue;
		    lista[j++] = array[i];		      		      
		}
		if (j != array.length){
			String[] newLista = new String[j];
			System.arraycopy(lista, 0, newLista, 0, j);
			return newLista;
		}
		return lista;
	}   

ixii nao tinha visto voce ja tinha respondido, o problema que do primeiro jeito que voce postou ele retirava as 2 String repetidas no Array, eu queria que caso tivesse 2 brasil, apagaria um e deixaria um! se tivesse 3 apagaria 2 e deixaria 1 ! eu montei desse jeito e funcionou nao sei da uma olhada e me fala ae q q vc axou!!!

Utilizando a sugestão do marcuskbra:

[code] public String[] soPodeHaverUm(String[] nomes) {

    HashSet<String> hsNomes = new HashSet<String>();
    
    for(String n : nomes) {
        hsNomes.add(n);
    }
    
    int i = 0;
    
    String[] novosNomes = new String[hsNomes.size()];
    
    for(String nome : hsNomes) {
        novosNomes[i++] = nome;
    }

    return novosNomes;
}[/code]

Eu achei que ficou limpinho...

flws

Que tal assim?

public class RemoveRepeteco {
    public static void main(String[] args) {
        String[] array = { "brasil", "java", "obama", "brasil" };
        
        array = new HashSet<String>(Arrays.asList(array))
                .toArray(new String[0]);
        
        for (String str : array)
            System.out.println(str + " ");
    }
}

É só uma variação do código do fantomas, usando o que já tem pronto na API.

Se quiser que o resultado saia ordenado, só troque a palavra “HashSet” por “TreeSet”.

Da forma que o amigo bertu disse parecia que tinha que remover o brasil tbm.
A solução do Vini é a mais limpa.

Vc poderia criar um MAPA cuja chave é String e o valor é a quantidade de ocorrencias.

Depois poderia filtrar o MAPA para aquelas strings que acontecem X vezes ou apenas iterar sobre o mapa para mostrar os valores distintos.

Leia o que ele diz dois posts abaixo do código q vc postou.

Oops, então eu é que não tinha entendido direito. A resposta do ViniGodoy é a melhor solução pro o caso de se eliminar somente a repetição. Sem dúvida é a melhor solução de todas vistas aqui, e seu tivesse entendido (burrice minha) teria feito como ele fez, isto é, usando Set. Mesmo assim gostei do exercício de bolar um algoritmo eficiente para retirar aqueles repetidos. :smiley:

A solução do davidbuzatto é simples, MAS acontece que ela tem complexidade computacional quadrática (O(n^2)) enquanto a minha tinha linear (O(2N)), além de utilizar somente arrays. Se vc tiver um vetor de 1.000 elementos o algoritmo dele vai fazer 1.000.000 de comparações (!!), e isto em algumas situações é inaceitável.

Leia o que ele diz dois posts abaixo do código q vc postou.[/quote]

Ja corrigi o meu post :smiley: