Bom dia estou temtando colocar um replace no meu programa ate achei o metodo so que não faço ideia ondo coloco ele se alguem conseguir ajudar quero Tirar todos os brancos do texto e subistituir por ; ex:
Arquivo : bola sapato ra cadeira bolacha
Novo: bola;sapato;ra;cadeira;bolacha
Este e o meu codigo funcionando tem que fazer alguns imports
mportjava.io.*;/* * * Juntar tudo em uma linha 05-03-2010 * Limpar todos os Brancos linha 27 "StringUtils.deleteWhitespace" * aux = aux.replace (" ", ";"); */publicclassProcessadorTexto{publicstaticvoidmain(String[]args)throwsException{if(args.length!=2){System.out.println("uso: java ProcessamentoTexto arquivo.txt novoArquivo.txt");System.exit(1);}//Variavel encontra Forms.Stringregex="\\$DJDE\\$ FORMS=";//Variavel Replace troca todos os espaços em Branco por ";"aux=aux.replace(" ",";");try{FileInputStreamstream=newFileInputStream(args[0]);InputStreamReaderstreamReader=newInputStreamReader(stream);BufferedReaderreader=newBufferedReader(streamReader);//Chamo 1 variavel. Stringline=null;Patternpattern=Pattern.compile(regex);Matchermatcher=null;Filefile=newFile(args[1]);StringUtils.deleteWhitespacefile.createNewFile();FileWriterfileWriter=newFileWriter(file);BufferedWriterwriter=newBufferedWriter(fileWriter);booleaninicio=true;// Neste while lemos o arquivo linha a linha while((line=reader.readLine())!=null){matcher=pattern.matcher(line);//se casou o conteúdo if(matcher.find()){if(!inicio){/* * quando casar o conteúdo... o que houver antes do trecho casado * pertence ao item anterior... */writer.write(line.substring(0,matcher.start())+";");writer.newLine();}inicio=false;//o conteudo da linha.. após o trecho casado... pertence ao novo item writer.write(line.substring(matcher.end()));continue;}//se nao casou.. é pq a linha inteira pertence ao item corrente... writer.write(line);}writer.close();fileWriter.close();reader.close();streamReader.close();stream.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}
a questão e onde eu chamo minha função dentro do programa
vc tem que usar o replace na string q vc quer tirar os caracteres. (acho que é line no seu código, linha 67 e 62).
E esse seu código não compila. Onde vc declarou o aux? de onde vem esse StringUtils.deleteWhitespace na linah 34?
L
labavel
Tem razao e que não compilei ele antes de enviar
mportjava.io.*;/* * * Juntar tudo em uma linha 05-03-2010 * Limpar todos os Brancos linha 27 "StringUtils.deleteWhitespace" * aux = aux.replace (" ", ";"); */publicclassProcessadorTexto{publicstaticvoidmain(String[]args)throwsException{if(args.length!=2){System.out.println("uso: java ProcessamentoTexto arquivo.txt novoArquivo.txt");System.exit(1);}//Variavel encontra Forms. Stringregex="\\$DJDE\\$ FORMS=";//Variavel Replace troca todos os espaços em Branco por ";" aux=aux.replace(" ",";");try{FileInputStreamstream=newFileInputStream(args[0]);InputStreamReaderstreamReader=newInputStreamReader(stream);BufferedReaderreader=newBufferedReader(streamReader);//Chamo 1 variavel. Stringline=null;Patternpattern=Pattern.compile(regex);Matchermatcher=null;Filefile=newFile(args[1]);file.createNewFile();FileWriterfileWriter=newFileWriter(file);BufferedWriterwriter=newBufferedWriter(fileWriter);booleaninicio=true;// Neste while lemos o arquivo linha a linha while((line=reader.readLine())!=null){matcher=pattern.matcher(line);//se casou o conteúdo if(matcher.find()){if(!inicio){/* * quando casar o conteúdo... o que houver antes do trecho casado * pertence ao item anterior... */writer.write(line.substring(0,matcher.start())+";");writer.newLine();}inicio=false;//o conteudo da linha.. após o trecho casado... pertence ao novo item writer.write(line.substring(matcher.end()));continue;}//se nao casou.. é pq a linha inteira pertence ao item corrente... writer.write(line);}writer.close();fileWriter.close();reader.close();streamReader.close();stream.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}
Aquele codigo eu estava utilizando dentro do regex para limpar todos os espaços em branco porem eu tenho que ter um Delimitador “;”
conforme voce falou se eu substituir line por aux funciona ?
mario.fts
vou te dar um exemplo simples
BufferedReader br = new BufferedReader(new FileReader("c:/origem.txt")); //origem
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/destino.txt")); //resultado
while (br.ready()) {
String linha = br.readLine(); //aqui eu leio o arquivo linha a linha
linha = linha.replace(" ",";"); //aqui eu tiro os espaços e substituo por ;
bw.write(linha); //escrevo a linha no arquivo de saida
bw.write("\r\n"); //escreve uma quebra de linha, só pra não ficar tudo na mesma linha
}
//fecha tudo
br.close();
bw.flush();
bw.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
arquivo de entrada:
bla bla bla
ha ha ha ha
aqui um texto separado por espaços normalmente
importjava.io.*;/* * * Juntar tudo em uma linha 05-03-2010 * Limpar todos os Brancos linha 27 "StringUtils.deleteWhitespace" * aux = aux.replace (" ", ";"); */publicclassProcessadorTexto{publicstaticvoidmain(String[]args)throwsException{if(args.length!=2){System.out.println("uso: java ProcessamentoTexto arquivo.txt novoArquivo.txt");System.exit(1);}//Variavel encontra Forms.Stringregex="\\$DJDE\\$ FORMS=";//Variavel Replace troca todos os espaços em Branco por ";"try{FileInputStreamstream=newFileInputStream(args[0]);InputStreamReaderstreamReader=newInputStreamReader(stream);BufferedReaderreader=newBufferedReader(streamReader);//Chamo 1 variavel. Stringline=line.replace(" ",";");Patternpattern=Pattern.compile(regex);Matchermatcher=null;Filefile=newFile(args[1]);file.createNewFile();FileWriterfileWriter=newFileWriter(file);BufferedWriterwriter=newBufferedWriter(fileWriter);booleaninicio=true;// Neste while lemos o arquivo linha a linha while((line=reader.readLine())!=null){matcher=pattern.matcher(line);//se casou o conteúdo if(matcher.find()){if(!inicio){/* * quando casar o conteúdo... o que houver antes do trecho casado * pertence ao item anterior... */writer.write(line.substring(0,matcher.start())+";");writer.newLine();}inicio=false;//o conteudo da linha.. após o trecho casado... pertence ao novo item writer.write(line.substring(matcher.end()));continue;}//se nao casou.. é pq a linha inteira pertence ao item corrente... writer.write(line);}writer.close();fileWriter.close();reader.close();streamReader.close();stream.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}
Se conseguir compilar ele e ver se der certo valeu.
mario.fts
vou analisar uma linha do seu código:
Stringline=line.replace(" ",";");
neste ponto do seu programa, o quem dentro de line? NADA. Não adianta dar replace aqui, vc vai tomar um nullpointer.
vc tem que usar o replace DEPOIS que vc tiver lido a linha, e jogado o conteudo na variavel line.
replace é um método da classes String, ele se aplica a string em que vc chama o método, e retorna uma outra string com o resultado do replace.
no exemplo q eu te passe eu faço o replace para cada string q é lida no loop. é isso q vc tem q fazer.
L
labavel
Tem razão substitui e ficou assim
importjava.io.*;/* * * Juntar tudo em uma linha 05-03-2010 * Limpar todos os Brancos linha 27 "StringUtils.deleteWhitespace" * aux = aux.replace (" ", ";"); */publicclassProcessadorTexto{publicstaticvoidmain(String[]args)throwsException{if(args.length!=2){System.out.println("uso: java ProcessamentoTexto arquivo.txt novoArquivo.txt");System.exit(1);}//Variavel encontra Forms.Stringregex="\\$DJDE\\$ FORMS=";//Variavel Replace troca todos os espaços em Branco por ";"try{FileInputStreamstream=newFileInputStream(args[0]);InputStreamReaderstreamReader=newInputStreamReader(stream);BufferedReaderreader=newBufferedReader(streamReader);//Chamo 1 variavel. Stringline=null;Patternpattern=Pattern.compile(regex);Matchermatcher=null;linha=linha.replace(" ",";");Filefile=newFile(args[1]);file.createNewFile();FileWriterfileWriter=newFileWriter(file);BufferedWriterwriter=newBufferedWriter(fileWriter);booleaninicio=true;// Neste while lemos o arquivo linha a linha while((line=reader.readLine())!=null){matcher=pattern.matcher(line);//se casou o conteúdo if(matcher.find()){if(!inicio){/* * quando casar o conteúdo... o que houver antes do trecho casado * pertence ao item anterior... */writer.write(line.substring(0,matcher.start())+";");writer.newLine();}inicio=false;//o conteudo da linha.. após o trecho casado... pertence ao novo item writer.write(line.substring(matcher.end()));continue;}//se nao casou.. é pq a linha inteira pertence ao item corrente... writer.write(line);writer.write(linha);writer.write("\r\n");}writer.close();fileWriter.close();reader.close();streamReader.close();stream.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}
Chamo o Replace depois de ler todo o arquivo linha 68 e tambem coloquei o caracter de scape “\r\n” e correto chamar neste local ?
mario.fts
Vc ta entendendo algo muito errado.
troca
writer.write( line );
writer.write( linha ); // pq raios vc ta fazendo isso?
writer.write("\r\n");
por
writer.write( line.replace(" ", ";") ); //vc tem que dar o reclace NA STRING QUE VC QUER TIRAR OS ESPAÇOS, não antes, nem depois.
writer.write("\r\n");
O replace se aplica ao CONTEUDO DA VARIAVEL texto. O que ele retorna é uma outra String, com o conteudo “bla;bla;bla”, que é colocado dentro da variavel resultado.
É de extrema importância ler a documentação e, caso necessário, algum tutorial antes de sair tentando na expectativa de conseguir fazer na base da “tentativa e erro”.
Veja e tente entender a solução:
importjava.util.*;importjava.io.*;publicclassProcessadorTexto{publicstaticvoidmain(String[]args){// verifica se há dois argumentosif(args.length!=2){falhar("Uso: java ProcessadorTexto ARQUIVO NOVO_ARQUIVO");}// verifica se o arquivo de entrada realmente existeFileentrada=newFile(args[0]);if(!entrada.exists()){falhar("Arquivo de entrada não encontrado");}// verifica se o arquivo de saída não existe aindaFilesaida=newFile(args[1]);if(saida.exists()){falhar("Arquivo de saída já existe");}// verifica se a pasta onde o arquivo será salvo já existe// e, se não existir ainda, criaFilepastaSaida=saida.getParentFile();if(pastaSaida!=null&&!pastaSaida.mkdirs()){falhar("Não foi possível criar diretório onde será salvo o arquivo");}// cria o arquivo de saída vaziotry{if(!saida.createNewFile()){falhar("Não foi possível criar o arquivo de saída");}}catch(IOExceptione){falhar("Não foi possível criar o arquivo de saída: "+e.getMessage());}// cria o Scanner para ler e o PrintWriter para escreverScannersc=null;PrintWriterpw=null;try{sc=newScanner(entrada);pw=newPrintWriter(saida);// enquanto houverem mais linhas na entradawhile(sc.hasNextLine()){Stringlinha=sc.nextLine();// escreve na saída o valor alteradopw.println(linha.replaceAll("( )+",";"));}// informa que tudo correu bemSystem.out.println("Arquivo processado com sucesso!");}catch(FileNotFoundExceptione){// como verificamos se os arquivos existiam antes, isso não deve ocorrer// mesmo assim é boa prática capturar e tratar essa exceçãoSystem.err.println("Não foi possível econtrar arquivo: "+e.getMessage());}finally{// para finalizar, fechamos os recursos que usamosif(sc!=null){sc.close();}if(pw!=null){pw.flush();pw.close();}}}/** * Esse método mostra a mensagem de erro e encerra a JVM com um código de * erro: <code>System.exit(1)</code>. */privatestaticvoidfalhar(Stringmensagem){System.err.println(mensagem);System.exit(1);}}