[RESOLVIDO] Como "Concatena caracteres em uma String" para poder salvar

Então beleza pessoal. :twisted:

Eu criei um pequeno programa para transforma um array de char em uma String para depois salvar em um arquivo txt, mas acontece que quando eu tento salvar as seguintes letras ‘A’, 'B ', ‘C’, ‘D’ ,‘E’, ‘F’, ‘G’ em um arquivo txt a unica coisa que é salva no arquivo é a letra ‘G’ isso ocorre pelo fato de ser um array e todos os valores estarem sendo passado um a um dentro de um loop de [color=blue]for[/color], sendo assim quando se chega ao fim da execução do [color=blue]for[/color] todos os valores que haviam antes já foram substituídos pelo novo valor.
Aqui esta a classe que eu criei que esta dando esse prblema:




public class CharParaString
{
private char megachar;
private String gv;

Classe_Salva_Teste classe_salva = new Classe_Salva_Teste();

//Neste método, ele recebe um array de char da classe "Main_CharParaString"
public void testCharArray(char[] let)
{

    //CRiaçção do array de char configurado com o tamanho do array de char[] que é enviado para esse métod.
char[] letra = new char[let.length];
for(int i = 0; i < letra.length; i++)
{
letra[i] = let[i];//Esta armazenando o que foi recebido na variavel letra dentro de um loop for..



System.out.println((char)letra[i]);//Esta imprimindo o que esta sendo passa para letra

megachar = (char)letra[i]; 
//Esta armazenado os valores do array em uma variavel do tipo char.

gv = Character.toString(megachar);
//Esta convertendo o que estiver contido na variavel "megachar" para uma String.

classe_salva.paraSalvar(gv);//Esta enviando a String gv para a clsse "Classe_Salva_Teste".

}




System.out.println(letra);


}

}


Aqui esta a classe para salvar:


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
import javax.swing.JOptionPane;

public class Classe_Salva_Teste
{

private String recebido_para_salvar;


public void paraSalvar(String entregar){
try{
//Inicializa a variável recebido_para_salvar com o valor do parametro entregar.
recebido_para_salvar = entregar;
System.out.println("Classe_Salva: " + recebido_para_salvar);



//Recebe o que estiver contido em recebido_para_salvar em uma Stream de caractere.
StringReader acumula_String = new StringReader(recebido_para_salvar);

//Recebe o que estiver contida em acumula_string.
BufferedReader leitor_buffer = new BufferedReader(acumula_String);

//O nome que o arquivo salvo tera.
FileWriter nome_para_salvar = new FileWriter("Arquivo_salvo.txt"); 

//Vai receber o que estiver contida em nome_para_salvar.
BufferedWriter escritor_buffer = new BufferedWriter(nome_para_salvar);

//Recebe o que estiver contida em escritor_buffer para que possa ser escrita
//em um arquivo .txt
PrintWriter escrevendo_arquivo = new PrintWriter(nome_para_salvar, false);

//escritor_buffer.write(recebido_para_salvar);
//escritor_buffer.close();


      //Cria uma variável do tipo String que é inializada como null.
	  String s = null;
	  
      //Enquanto houverlinha para ser lida continue escrevendo no arquivo.
	  while((s = leitor_buffer.readLine()) != null )

        escrevendo_arquivo.write(s);
      escrevendo_arquivo.close();


//escrevendo_arquivo.print(recebido_para_salvar);
//escrevendo_arquivo.close();

//Tenta tratar alguma exceção.
}catch(IOException e){

    JOptionPane.showMessageDialog(null,"Deu merda nessa bagaça\n XP");
    }


}



}

E por fim a classe onde esta o método main:


public class Main_CharParaString
{
public static void main(String[] args)
{

CharParaString char_Para_String = new CharParaString();

String arq = "ABCDEFG";


char[] meuChar = arq.toCharArray();//Esta convertendo uma String para um array de char[].


char_Para_String.testCharArray(meuChar);//Esta enviando "meuChar" para a classe CharParaString

}

}

Então eu gostaria de algum jeito de poder concatenar os valore que são armazenados na String: gv = Character.toString(megachar); quando ele recebe os valores, porque senão ele simplesmente substituira o valor que já foi recebido em cada iteração do loop.

Eu já dei uma pesquisada na classes StringBufferhttp://docs.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html e no StringBuilderhttp://docs.oracle.com/javase/6/docs/api/index.html?java/lang/StringBuffer.html

Mas não consegui fazer nada que fizesse o que eu quero, que é concatenar todos os caracteres que é recebido pela variável “gv” em uma unica String gv = Character.toString(megachar);
E enviar ela para a classe “Classe_Salva_Teste” para poder ser salva em um arquivo .txt

Alguém poderia me ajudar com isso.

tente assim:

gv += Character.toString(megachar);

Faça:

gv = new String(let);

E você pode tirar todo o código inútil envolvendo o array letras[i] e a variável megachar.
Na verdade, provavelmente esse método todo poderá ser apagado.

[quote=ViniGodoy]Faça:

gv = new String(let[i]);

E você pode tirar todo o código inútil envolvendo o array letras[i] e a variável megachar.
Na verdade, provavelmente esse método todo poderá ser apagado.

[/quote]

Valeu por responderem.

"yhhik" O seu código funcionou belezinha aqui mas no modo do "ViniGodoy" é um pouco melhor, não necessariamente do modo que ele fez que é: gv = new String(let[i]);

Se eu tentasse fazer desse jeito, na hora de compilar seria me retornado o seguinte erro:

.\CharParaString.java:27: cannot find symbol symbol : constructor String(char) location: class java.lang.String gv = new String(let[i]);

Mas se eu utilizasse o que foi armazenado na variável "letra" não daria nenhum problema.
Aqui como ficou essa classe com a modificação, e eu também dei uma modificada na classe que eu esto usando para salvar em um arquivo txt.




public class CharParaString
{

//Esta inicializano gv com &quot;&quot; para quando for escrever no arquivo não escrever a palavra &quot;null&quot; tambem.
private String gv = &quot;&quot;;

Classe_Salva_Teste classe_salva = new Classe_Salva_Teste();

//Neste método, ele recebe um array de char da classe &quot;Main_CharParaString&quot;
public void testCharArray(char[] let)
{

    //CRiaçção do array de char configurado com o tamanho do array de char[] que é enviado para esse métod.
char[] letra = new char[let.length];
for(int i = 0; i &lt; letra.length; i++)
{
letra[i] = let[i];//Esta armazenando o que foi recebido na variavel letra dentro de um loop for..



System.out.println((char)letra[i]);//Esta imprimindo o que esta sendo passa para letra


//Provavelmete deva estar concatenando o que estiver contido em &quot;letra&quot; para formar uma unica String.
gv = new String(letra);


classe_salva.paraSalvar(gv);//Esta enviando a String gv para a clsse &quot;Classe_Salva_Teste&quot;.

}


System.out.println(letra);

}

}


Aqui a classe que salva que eu também a modifiquei um pouquinho.


import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.swing.JOptionPane;

public class Classe_Salva_Teste
{

private String recebido_para_salvar;


public void paraSalvar(String entregar){
try{

recebido_para_salvar = entregar;

//O nome que o arquivo salvo tera.
FileWriter nome_para_salvar = new FileWriter(&quot;Arquivo_salvo.txt&quot;); 

PrintWriter escrevendo_arquivo = new PrintWriter(nome_para_salvar);



escrevendo_arquivo.write(recebido_para_salvar);
escrevendo_arquivo.close();

//Tenta tratar alguma exceção.
}catch(IOException e){

    JOptionPane.showMessageDialog(null,&quot;Deu merda nessa bagaça\n XP&quot;);
    }


}



}

E a classe que tem o método main nessa classe continuou tudo igual.


public class Main_CharParaString
{
public static void main(String[] args)
{

CharParaString char_Para_String = new CharParaString();

String arq = &quot;ABCDEFG&quot;;


char[] meuChar = arq.toCharArray();//Esta convertendo uma String para um array de char[].


char_Para_String.testCharArray(meuChar);//Esta enviando &quot;meuChar&quot; para a classe CharParaString

}

}

Agora como podem ver o programinha que eu crie esta fazendo o que eu queria, muito obrigado a quem respondeu.
Valeu e até a próxima. :twisted:

Cara, olha a idiotice que você tá fazendo nesse método:

    //Criação de um array de char IDENTICO ao passado para o método
   char[] letra = new char[let.length];  

   //Cópia completamente inútil.
   for(int i = 0; i &lt; letra.length; i++)  
   {  
      letra[i] = let[i];
      System.out.println((char)letra[i]); //Cast inútil de char para char
   }    

Seu método pode ser simplesmente:

public void testCharArray(char[] let) { classe_salva.paraSalvar(new String(let)); }

Aliás, como eu já falei no outro post, se é tão trivial assim, nem precisaria do método.

“Kauma” não precisa se estressar, eu só estou treinando criação de métodos.

E eu sou só um iniciante em Java, do jeito que eu fiz foi da unica maneira que eu sei fazer ou melhor sabia fazer, se bem que dessa maneira que você postoupublic void testCharArray(char[] let) { classe_salva.paraSalvar(new String(let)); } eliminaria totalmente a classe que eu criei para receber o array de char[].

Não precisa pedir calma, eu não tô nervoso. :slight_smile:
Só ressaltei as operações inúteis porque elas são… inúteis. :twisted: