intersecção de string

11 respostas
Algebra

to usando este código para intersecção de strings

Set set1 = new LinkedHashSet();
Set set2 = new LinkedHashSet();

set1.add( um );

set1.add( dois );

set1.add( três );

set1.add( quatro );
set2.add( dois );

set2.add( quatro );

set2.add( seis );

set2.add( oito );

// intersecção
set1.retainAll( set2 );

o problema é que no meu caso em em dos set’s posso ter um “Dois” ou mesmo “DOIS”
dae a intersecção não acontece, deve ser por causa do método ser casesensitive

e agora oque faço? se alguem puder me ajudar desde já agradeço.

11 Respostas

furutani

Insira tudo em maiusculas e sem acentuação.

Algebra

a lógica com que estou trabalhando já uso função para retiriar acento

mas impossivel inserir e comparar tudo em maiusculas eu uso palavras prontas (websemântica)

Laubstein_M_cio

Na hora da comparação de um uppercase nas duas strings.

Algebra

eu uso um método que compara 2 ArrayList o “retainAll” como isso é possivél para um vetor inteiro?

Laubstein_M_cio

Sobrescreva o equals da classe, para que na comparação utilizem o uppercase

Algebra

aff… eu penso que isso vai dar um pouco de trabalho.

gostaria de saber se tem como deixar maiuscula um Arraylist inteiro?

furutani

é só deixar em maiuscula ao adicionar com o método add(“tres”.toUpperCase())

Algebra

Não era exatamente oque eu estava pensando mas isso vai servir também

vlw furutani

Laubstein_M_cio

Já que você esta utilizando Strings diretamente não é possível sobrescrever o equals, se fosse um objeto wrapper para as strings você poderia faze-lo dessa maneira, ou mesmo ao construir o objeto poderia dar upper no construtor ou no set, mas bem, o Frutani deu a melhor e mais fácil saída, não vejo nada que possa ser mais simples.

Abraço.

Vinny

Da Para Usar o toUpperCase Na hora da compação também

if (set1.elementAt(posicao).toString().toUpperCase().equals("DOIS"))
E

Em vez de usar um LinkedHashSet (que envolveria sobreescrever hashCode e equals, o que não pode ser feito com a classe String, que é final), você pode usar um TreeSet com um Comparator especializado. Exemplo:

import java.util.*;

class IgnoreCaseComparator implements Comparator<String> {
    @Override
    public int compare (String s1, String s2) {
        return s1.compareToIgnoreCase (s2);
    }
    public static IgnoreCaseComparator getInstance() { return instance; }

    private static IgnoreCaseComparator instance = new IgnoreCaseComparator();
}

class ExemploInterseccao {

    public static void main (String[] args) {
        Set<String> set1 = new TreeSet<String>(IgnoreCaseComparator.getInstance());   
        Set<String> set2 = new TreeSet<String>(IgnoreCaseComparator.getInstance());   
  
        set1.add( "um" );   
        set1.add( "dois" );   
        set1.add( "três" );   
        set1.add( "quatro" );   
  
        set2.add( "DoIs" );   
        set2.add( "QUATRO" );   
        set2.add( "seis" );   
        set2.add( "oito" );  

        // intersecção   
        set1.retainAll( set2 ); 
        System.out.println (set1); // imprime "[dois, quatro]"
    }
}
Criado 15 de novembro de 2009
Ultima resposta 16 de nov. de 2009
Respostas 11
Participantes 5