Duvida com replace

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);
	}

}