Substituir caracteres em String

5 respostas
ricardobras

oi pessoal td bem?

entao.. estou com um probleminha!

eu tenho um arquivo txt com o seguinte conteudo :

|I050|01012002|01|S|04|1112|111|BANCO MOVIMENTO| |I050|01012002|01|S|05|111201|1112|BANCO MOVIMENTO| |I050|01012002|01|A|06|1112010000024|111201|BANCO DO BRASIL| |I052||1112010000024| |I050|01012002|01|A|06|1112010000036|111201|BANCOB C/C 02010-9| |I052||1112010000036| |I050|01012002|01|A|06|1112010000048|111201|BANCOB C/C 02018-4| |I052||1112010000048| |I050|01012002|01|A|06|1112010000050|111201|BANCOB LTDA C/C 50-7| |I052||1112010000050| |I050|01012002|01|A|06|1112010000061|111201|BANCOB RUBIATABA LTDA| |I052||1112010000061| |I050|01012002|01|A|06|1112010000073|111201|BRADESCO S/A| |I052||1112010000073| |I050|01012002|01|A|06|1112010000085|111201|ITAU S/A| |I052||1112010000085| |I050|01012002|01|A|06|1112010001806|111201|CAIXA ECONOMICA FEDERAL| |I052||1112010001806| |I050|01012002|01|A|06|1112010006634|111201|BANCO SAFRA S.A|

eu ja consegui fazer a leitura do arquito txt, e armazenar tudo em um String chamado ( lerLinha ), o problema é:

eu quero substituir em cada linha o terceiro " | " (pipe) pelo numero 5, eu ja utilizei o meto StringTokenizer, Substring.. e não estou conseguindo,
entao agora estou utilizando um novo metodo para tentar substituir mais nao estou tendo sucesso!

segue o metodo

public void substituirCaracteres() {
       StringBuffer strb = new StringBuffer(lerLinha);
       strb.setCharAt(3, '5');
       System.out.println(strb);

    }

se alguem puder me ajudar a resolver esse problema eu agradeço.. obrigado!

5 Respostas

jyoshiriro

Talvez as classes do Commons Lang te ajudem:
http://commons.apache.org/lang/

Pode arriscar o Commons CVS:
http://commons.apache.org/sandbox/csv/

jyoshiriro

Veja que o que você tem é um tipo de arquivo “Comma-separated values”, só que ao invés da vírgula você tem “|”

Logo, deve pesquisar como tratar desse tipo de arquivo em java, entendeu?

T

Opa da uma olhada e ve se te ajuda

String teste = "|I050|01012002|01|S|04|1112|111|BANCO MOVIMENTO|";
teste = teste.replaceAll("(\\|I\\d+\\|\\d+)\\|(.*)", "$15$2");
System.out.println(teste);
ricardobras

valewww pessoalll.. consegui.. brigadao pela ajuda!

segue abaixo o metodo que utilizei:
public String substituirCaracteres(String caractere) {
     int contador = caractere.length();
     int conta = 0;
     for(int i=0; i< contador; i++ ){
             if(caractere.substring(i, i+1).equals(txtDe.getText())){
             int posicao = i+1;
            
             conta+=1;
         if(conta==Integer.parseInt(txtPosicao.getText())){
                    return caractere.substring(0, posicao-1)+txtPara.getText()+caractere.substring(posicao);

         }
         }
     }
return null;
    }
WellingtonRamos
//Apenas para usuário não precisar passar parâmetros "desnecessários"
    int getIndex(String str, String search, int depth) {
        return getIndex(str, search, 0, depth, 0);
    }
    
    int getIndex(String str, String search, int from, int depth, int count) {
        if(str.length() < from || depth == 0) return -1;
        int index = str.indexOf(search, from);
        if(++count >= depth) return index; //Para não precisar entrar outro nível para retornar
        
        //Continua busca a partir do indice seguinte
        return getIndex(str, search, index + 1, depth, count);
    }
USO
String t = "parte1|parte2|parte3|parte4";
        
        String change = "5";

        int indice = getIndex(t, "|", 3); //Altere o último parâmetro para o pipe que precisa
        if(indice > 0) {
            String init = t.substring(0, indice);
            String end = t.substring(indice+1);
            System.out.println(init+change+end);
        } else {
            System.out.println("No pipe found");
        }
Criado 29 de junho de 2010
Ultima resposta 29 de jun. de 2010
Respostas 5
Participantes 4