Problema incompreensível em operações com arquivos

Olá,

Estou enfrentando um problema aleatório que nunca tinha visto antes. Eu estou tentando buscar uma String dentro de um arquivo.
Eu tenho 2 arquivos, que obviamente não são iguais, porém o trecho neles que eu estou tentando buscar existem e são idênticos em ambos os arquivos. Calculei o hashCode() do trecho em ambos os arquivos em questão a são os mesmos.
O que acontece é que o primeiro arquivo A, minha operação de busca é feita com sucesso, sendo que na operação com o arquivo B, não consegue achar a string.
Então, eu achei que tinha algo haver com o modo que eu estava lendo o arquivo, por isso tentei 3 formas diferentes de ler o arquivo:

try { FileReader rd = new FileReader(f); char[] buf = new char[(int) f.length()]; rd.read(buf); afterEdit = new String(buf); rd.close(); } catch (IOException e) { }

byte[] buffer = new byte[(int) new File(f.getAbsolutePath()).length()]; BufferedInputStream bis = null; try { bis = new BufferedInputStream(new FileInputStream(f)); bis.read(buffer); } finally { if (bis != null) { try { bis.close(); } catch (IOException ignored) { } } } afterEdit = new String(buffer);

FileInputStream fin = new FileInputStream(f); OutputStream os = new ByteArrayOutputStream(); ZIP.copyInputStream(fin, os); afterEdit = os.toString(); fin.close(); os.flush(); os.close();

f = Arquivo que vou ler
afterEdit = String que vai armazenar o conteúdo do arquivo

Em nenhum dos 3 procedimentos nenhuma exceção é lançada. Todos os 3 fazem exatamente a mesma coisa com sucesso.

Minha função para buscar a String no arquivo é a seguinte

cursor = afterEdit.toLowerCase().indexOf(toSearch.toLowerCase());

toSearch = a String que eu desejo buscar

Quando o arquivo A é lido, ele acha a String com sucesso. Mas no arquivo B, que também contém a String, não acha a String (retorno -1)

Não sei mais o que fazer, eu acho que deve ser a codificação do arquivo, algo do tipo. Não faço a mínima idéia do que pode ser. Segue em anexo os arquivos que funciona a busca, o que não funciona, e a String. Detalhe, a String também conta com aqueles espaços. No primeiro arquivo, ele acha a String por completa (incluindo os espaços), mas no outro arquivo não. Os espaços representam um papel importante no busca, portanto não podem ser ignorados ou removidos.

Agradeço de antemão, pois estou ficando biruta sem conseguir resolver esta situação.

Uai, qual o seu problema? Não entendi.

import java.io.*;

class Achar {

	private static String carregarArquivo (File f, String encoding) throws IOException {
		StringBuilder sb = new StringBuilder();
		BufferedReader br = null;
		try {
			br = new BufferedReader (new InputStreamReader (new FileInputStream (f), encoding));
			for (String linha = br.readLine(); linha != null; linha = br.readLine()) {
				sb.append (linha).append ("\n");
			}
		} finally {
			if (br != null) try { br.close(); } catch (IOException ex) { }
		}
		return sb.toString();
	}
    /**
	 * Procurar o conteúdo do arquivo "oQue" dentro do arquivo "onde".
	 * Este método supõe que ambos os arquivos sejam suficientemente pequenos para
	 * que possam ser carregados integralmente na memória.
	 * @return -1 se não achar, a posição (iniciando por 0) se achar.
	 */
    public int achar (File oQue, File onde) throws IOException {
		String strOQue = carregarArquivo (oQue, "ISO-8859-1");
		String strOnde = carregarArquivo (onde, "ISO-8859-1");
		return strOnde.indexOf (strOQue);
	}
    public static void main (String[] args) throws IOException {
		System.out.println ((new Achar()).achar (new File (args[0]), new File (args[1])));
	}
}
C:\>java -cp . Achar String.txt "neste arquivo não acha a String.xml"
10497

C:\>java -cp . Achar String.txt "este arquivo funciona.xml"
10564

Funcionou da sua maneira. Sabia, tinha de ser a maneira que eu estava lendo. Acho que era o Encoding. Eu selecionei UTF-8 no meu caso porque é o padrão que estamos usando na base de dados XML. Criei uma classe FileUtils para gerenciar isso. Muito obrigado bezier curve, me salvou aqui. Passei 2 dias parados sem puder atualizar o programa por causa disso.