Replace em arquivo texto

4 respostas
rafaduka

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?

4 Respostas

kapa01

tente fazer isso

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

talves funcione

rafaduka

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:

01010000041000999003AAA
##   
01010000168000999003BBB
##                    
01011000071000499003CCC
##                  
01011000234000399003DDD
##
          .
          .
          .
lina

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!

rafaduka

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.

while (s != null)
            {
            	s = br.readLine();
            	
            	s = s.replace(s.substring(18,21), "##");
                System.out.println(s);
            }

Vlw Pessoal

Criado 21 de agosto de 2009
Ultima resposta 21 de ago. de 2009
Respostas 4
Participantes 3