Galera eu to fazendo um exemplo de manipulação de 2 arquivos e vendo se um cnpj esta dentro do outro arquivo, mas o metodo contains parece nao esta funcionando corretamente, porque?
private ArrayList lista1 = new ArrayList();
private ArrayList lista2 = new ArrayList();
private ArrayList lista3 = new ArrayList();
public static void main(String[] args) throws IOException {
main m = new main();
m.arquivo();
}
public void arquivo() throws IOException{
FileReader empresas1 = new FileReader("C:\Documents and Settings\felipe\Desktop\confederativa.txt");//empresas da fecomercio
BufferedReader empresa1 = new BufferedReader(empresas1); // entrada de dados
FileReader empresas2 = new FileReader("C:\Documents and Settings\felipe\Desktop\cnpjconfederativa.txt");//empresas da fecomercio
BufferedReader empresa2 = new BufferedReader(empresas2); // entrada de dados cnpj
String linha1;
while ((linha1 = empresa1.readLine()) != null) {
lista1.add((String)linha1);
}
String linha2;
while ((linha2 = empresa2.readLine()) != null) {
lista2.add((String)linha2);
}
String l2;
for(int i=0;i< lista2.size();i++){
l2=(String) lista2.get(i);
if(lista1.contains(l2))
lista3.add(l2);
}
System.out.println("lista com nome e cnpj "+lista1.size());
System.out.println("lista so com cnpj "+lista2.size());
System.out.println("repetidos "+lista3.size());
}
}
[/code]
deveriam aparecer alguns cnpjs na lista 3 mas nao aparece nenhum!!
O arquivo lista1 contem o cnpj e alguns dados e o lista 2 so contem o cnpj mesmo!!
contains compara Object e não Strings, o que deve tá acontecendo é que ele compara as referências e não o valor da String, vc tem de dar um jeito de usar equals para comparar Strings…
Ah… o que nosso amigo falou sobre comparar endereço e não o conteúdo faz sentido Verifique isso com calma. Outra coisa é que se cada linha da lista1 contém mais que o cnpj, então vc teria que entrar em cada uma das linhas e verificar se ela não possui nenhums dos cnpj da lista 2… ou a ordem é inversa, lista 1 na lista 2?! Enfim, a idéia é essa… hehehe
Você poderia fazer isso com dois laços aninhados, mas vai ficar meio lento hein…
Engraçado, no Javadoc da 1.4.2 o método contains da ArrayList tá assim:
contains
public boolean contains(Object elem)
Returns true if this list contains the specified element.
Specified by:
contains in interface List
Overrides:
contains in class AbstractCollection
Parameters:
elem - element whose presence in this List is to be tested.
Returns:
true if the specified element is present; false otherwise.