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
mport java.io.*;
/*
*
* Juntar tudo em uma linha 05-03-2010
* Limpar todos os Brancos linha 27 "StringUtils.deleteWhitespace"
* aux = aux.replace (" ", ";");
*/
public class ProcessadorTexto
{
public static void main (String [] args) throws Exception{
if(args.length != 2){
System.out.println("uso: java ProcessamentoTexto arquivo.txt novoArquivo.txt");
System.exit(1);
}
//Variavel encontra Forms.
String regex = "\\$DJDE\\$ FORMS=";
//Variavel Replace troca todos os espaços em Branco por ";"
aux = aux.replace (" ", ";");
try {
FileInputStream stream = new FileInputStream(args[0]);
InputStreamReader streamReader = new InputStreamReader( stream );
BufferedReader reader = new BufferedReader( streamReader );
//Chamo 1 variavel.
String line = null;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = null;
File file = new File(args[1]); StringUtils.deleteWhitespace
file.createNewFile();
FileWriter fileWriter = new FileWriter( file );
BufferedWriter writer = new BufferedWriter( fileWriter );
boolean inicio = 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 ( FileNotFoundException e ) {
e.printStackTrace();
}
catch ( IOException e ) {
e.printStackTrace();
}
a questão e onde eu chamo minha função dentro do programa
aux = aux.replace (" ", ";");
o arquivo e este em anexo
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?
Tem razao e que não compilei ele antes de enviar
mport java.io.*;
/*
*
* Juntar tudo em uma linha 05-03-2010
* Limpar todos os Brancos linha 27 "StringUtils.deleteWhitespace"
* aux = aux.replace (" ", ";");
*/
public class ProcessadorTexto
{
public static void main (String [] args) throws Exception{
if(args.length != 2){
System.out.println("uso: java ProcessamentoTexto arquivo.txt novoArquivo.txt");
System.exit(1);
}
//Variavel encontra Forms.
String regex = "\\$DJDE\\$ FORMS=";
//Variavel Replace troca todos os espaços em Branco por ";"
aux = aux.replace (" ", ";");
try {
FileInputStream stream = new FileInputStream(args[0]);
InputStreamReader streamReader = new InputStreamReader( stream );
BufferedReader reader = new BufferedReader( streamReader );
//Chamo 1 variavel.
String line = null;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = null;
File file = new File(args[1]);
file.createNewFile();
FileWriter fileWriter = new FileWriter( file );
BufferedWriter writer = new BufferedWriter( fileWriter );
boolean inicio = 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 ( FileNotFoundException e ) {
e.printStackTrace();
}
catch ( IOException e ) {
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 ?
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
a saida gerada será assim:
bla;bla;bla
ha;ha;ha;ha
aqui;um;texto;separado;por;espaços;normalmente
entendeu?
Valeu acho que e isto
import java.io.*;
/*
*
* Juntar tudo em uma linha 05-03-2010
* Limpar todos os Brancos linha 27 "StringUtils.deleteWhitespace"
* aux = aux.replace (" ", ";");
*/
public class ProcessadorTexto
{
public static void main (String [] args) throws Exception{
if(args.length != 2){
System.out.println("uso: java ProcessamentoTexto arquivo.txt novoArquivo.txt");
System.exit(1);
}
//Variavel encontra Forms.
String regex = "\\$DJDE\\$ FORMS=";
//Variavel Replace troca todos os espaços em Branco por ";"
try {
FileInputStream stream = new FileInputStream(args[0]);
InputStreamReader streamReader = new InputStreamReader( stream );
BufferedReader reader = new BufferedReader( streamReader );
//Chamo 1 variavel.
String line = line.replace (" ", ";");
Pattern pattern = Pattern.compile(regex);
Matcher matcher = null;
File file = new File(args[1]);
file.createNewFile();
FileWriter fileWriter = new FileWriter( file );
BufferedWriter writer = new BufferedWriter( fileWriter );
boolean inicio = 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 ( FileNotFoundException e ) {
e.printStackTrace();
}
catch ( IOException e ) {
e.printStackTrace();
}
}
}
Se conseguir compilar ele e ver se der certo valeu.
vou analisar uma linha do seu código:
String line = 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.
Tem razão substitui e ficou assim
import java.io.*;
/*
*
* Juntar tudo em uma linha 05-03-2010
* Limpar todos os Brancos linha 27 "StringUtils.deleteWhitespace"
* aux = aux.replace (" ", ";");
*/
public class ProcessadorTexto
{
public static void main (String [] args) throws Exception{
if(args.length != 2){
System.out.println("uso: java ProcessamentoTexto arquivo.txt novoArquivo.txt");
System.exit(1);
}
//Variavel encontra Forms.
String regex = "\\$DJDE\\$ FORMS=";
//Variavel Replace troca todos os espaços em Branco por ";"
try {
FileInputStream stream = new FileInputStream(args[0]);
InputStreamReader streamReader = new InputStreamReader( stream );
BufferedReader reader = new BufferedReader( streamReader );
//Chamo 1 variavel.
String line = null;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = null;
linha = linha.replace (" ", ";");
File file = new File(args[1]);
file.createNewFile();
FileWriter fileWriter = new FileWriter( file );
BufferedWriter writer = new BufferedWriter( fileWriter );
boolean inicio = 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 ( FileNotFoundException e ) {
e.printStackTrace();
}
catch ( IOException e ) {
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 ?
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");
vou tentar explicar de novo.
String texto = "bla bla bla";
String resultado = texto.replace (" ", ";");
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.
leituras recomendadas: http://serjaum.wordpress.com/2009/07/21/objetos-string-em-java/
http://java.sun.com/javase/6/docs/api/java/lang/String.html
É 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:
import java.util.*;
import java.io.*;
public class ProcessadorTexto {
public static void main(String[] args) {
// verifica se há dois argumentos
if (args.length != 2) {
falhar("Uso: java ProcessadorTexto ARQUIVO NOVO_ARQUIVO");
}
// verifica se o arquivo de entrada realmente existe
File entrada = new File(args[0]);
if (!entrada.exists()) {
falhar("Arquivo de entrada não encontrado");
}
// verifica se o arquivo de saída não existe ainda
File saida = new File(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, cria
File pastaSaida = 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 vazio
try {
if (!saida.createNewFile()) {
falhar("Não foi possível criar o arquivo de saída");
}
} catch (IOException e) {
falhar("Não foi possível criar o arquivo de saída: " + e.getMessage());
}
// cria o Scanner para ler e o PrintWriter para escrever
Scanner sc = null;
PrintWriter pw = null;
try {
sc = new Scanner(entrada);
pw = new PrintWriter(saida);
// enquanto houverem mais linhas na entrada
while (sc.hasNextLine()) {
String linha = sc.nextLine();
// escreve na saída o valor alterado
pw.println(linha.replaceAll("( )+", ";"));
}
// informa que tudo correu bem
System.out.println("Arquivo processado com sucesso!");
} catch (FileNotFoundException e) {
// como verificamos se os arquivos existiam antes, isso não deve ocorrer
// mesmo assim é boa prática capturar e tratar essa exceção
System.err.println("Não foi possível econtrar arquivo: " + e.getMessage());
} finally {
// para finalizar, fechamos os recursos que usamos
if (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>.
*/
private static void falhar(String mensagem) {
System.err.println(mensagem);
System.exit(1);
}
}