Manipulando String

4 respostas
Cig

Boa tarde pessoal ! precisei compactar uma string porem agora eu preciso comparar cada caracter da string deixando somente os diferentes?

String str=aaabbbcccddde444s4e4e4es;

String concatenada = “”+str.charAt(0);

char c=str.charAt(0);
for (int i=1;i<str.length();i++){
       if (c!=str.charAt(i))
           concatenada+=str.charAt(i);
           c=str.charAt(i);

   }
   System.out.println("concatenada ="+concatenada);

//a resposta deste print vai ser abcde4s4e4e4es
preciso que fique abcde4s somente caracteres diferentes !! algm pode me ajudar ??

4 Respostas

ViniGodoy
//Criamos um set para guardar os caracteres. O set não permite duplicatas.
//Use o LinkedHashSet para manter a ordem de inserção, HashSet se a ordem não 
//importar ou um TreeSet para deixar os caracteres em ordem alfabética.
Set<Character> chars = new LinkedHashSet<Character>();

//Adicione os caracteres da string no set. Os duplicados serão descartados.
for (int i = 0; i < string.length(); i++) {
   chars.add(string.charAt(i));
}

//Monte a nova string com os caracteres restantes.
StringBuilder out = new StringBuilder();
for (Character c : chars) {
  out.append(c);
}

//Retorne-a.
return out.toString();
d2s

Não sei se é a melhor maneira…

String str = "aaabbbcccddde444s4e4e4es";
        String concatenada = "" + str.charAt(0);
        char c = str.charAt(0);

        for (int i = 0; i < str.length(); i++) {
            if (c != str.charAt(i)) {
                c = str.charAt(i);
                if (!concatenada.trim().contains(String.valueOf(c))) {
                    concatenada += c;
                }
            }
        }

        System.out.println("concatenada =" + concatenada);
ViniGodoy

É bem inferior ao método anterior. No seu, o contains irá percorrer a string inteira, buscando o caracter. Existe também o problema de usar o operador += na String, ao invés de um StringBuilder. Se você comparar esse algoritmo com o anterior, vai ver que o seu é exponencialmente mais lento, enquanto aquele ali tem decréscimo de performance praticamente linear.

d2s

OK ViniGodoy valeu pela dica! … :smiley:

Criado 8 de dezembro de 2009
Ultima resposta 9 de dez. de 2009
Respostas 4
Participantes 3