Replace em arquivo texto

Tenho um arquivo txt tabulado com posições iniciais e finais. Entretanto, não estou conseguindo utilizar replace para substituir a posicao desejada.

Estou utilizando o seguinte código:


import java.io.*;
import javax.swing.JOptionPane;
public class TesteQuatro {

//verifica se o arquivo que foi digitado pelo JOptionPane existe!
    public static void lerArquivo(String arquivo){
        File f = new File(arquivo);
        if (!f.exists()){
            System.out.println("Arquivo " + arquivo + " não existe!");
            return;
        }

        try{

            InputStream is = new FileInputStream(arquivo);

            InputStreamReader isr = new InputStreamReader(is);

            BufferedReader br = new BufferedReader(isr);

            String s = br.readLine();
            //verifica todas as linhas do txt e aplica o código abaixo
            while (s != null){
                s = br.readLine();
                s += s.substring(18, 20).replace("03", "##");
                System.out.println(s);
            }
        }catch(Exception x){
            System.out.println(x.getMessage());
        }   
    }

//starta a aplicao
    public static void main(String[] args) {
    	lerArquivo(JOptionPane.showInputDialog(null, "Digite o diretório"));
    }

}

O TXT possui a seguinte aparência:

01010000041000999003AAA                   
01010000168000999003BBB                  
01011000071000499003CCC                
01011000234000399003DDD            
01011000067000120003EEE                
01011000068000160003FFF                  
01011000204001490003GGG
         .
         .
         . 

Porém após a execução do código o “##” vai para o final, ficando da seguinte maneira:

01010000041000999003AAA      ##               
01010000168000999003BBB      ##              
01011000071000499003CCC     ##            
01011000234000399003DDD     ##         
01011000067000120003EEE       ##           
01011000068000160003FFF       ##             
01011000204001490003GGG     ##
         .
         .
         . 

O objetivo seria este:

010100000410009990##AAA              
010100001680009990##BBB            
010110000710004990##CCC            
010110002340003990##DDD         
010110000670001200##EEE            
010110000680001600##FFF               
010110002040014900##GGG
         .
         .
         . 

Como eu poderia aprimorar meu código?

tente fazer isso

 s += s.substring(18, 20).replace("03", "\r##");  

talves funcione

Realizei o teste, a diferença que a ## vai para linha de baixo, ou seja, não substituiu o 03. A saída ficou assim:

[code]01010000041000999003AAA

01010000168000999003BBB

01011000071000499003CCC

01011000234000399003DDD

      .
      .
      .

[/code]

Oi,

Você tem que retirar esse substring.

texto = texto.replace("03", "##");

Quando você usa o substring daquela maneira, o que está rodando para o programa é.:

texto += texto.substring(18,20).replace("03", "##");

Ou seja, a palavra texto já está iniciada: "01010000041000999003AAA " e faz a soma de “##”
ficando “01010000041000999003AAA “+”##”;

Tchauzin!

Desta maneira até funciona, o motivo de eu utilizar o substring é para localizar posicao inicial e final do arquivo texto. Se eu não usar, tudo que estiver com 03 no arquivo texto ele substitui para ##

Consegui resolver inserindo substring dentro do parametro do replace.

[code]while (s != null)
{
s = br.readLine();

        	s = s.replace(s.substring(18,21), "##");
            System.out.println(s);
        }[/code]

Vlw Pessoal