manipulação de arquivos com erro

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?

[code]package br.com.fecomerciodf;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

public class main {

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&lt 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!!

Falow!!!

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 :slight_smile: 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…

estranho isso…

Ou seja, ele usa o método equals, da string mesmo, que compara os valores, e não se é o mesmo objeto.

Essas outras informações além do cnpj estão em outras linhas separadas?

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.

dá um olhada

http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html#contains(java.lang.Object)

De onde vc tirou esse javadoc?

Ja resolvi galera, eu botei um for interno pra pegar a outra lista, ai comparou de boa!!

valeu!!!