String com layout fixo

Olá a todos,

Eu gostaria de saber como posso fazer uma String Fixa para poder gravar em um arquivo.

tipo assim eu tenho uma string composta de nome/endereço/telefone
tudo serial. Tipo nome vai da posição 1 até 30, endereço da 31 a 60, e telefone de 61 a 70.

o problema é q se eu coloco tipo
andrerua03casa05999999999

a string grava nas posições erradas como posso fazer ela gravar como no layout? :?:

muito obrigado

opa blz…

vc pode ir colocando mais valores no final da String assim:

String xxx = "Daniel";
xxx = xxx + "valor adicional";

flw!
espero ter ajudado!

Não entendi bem , mas se for o que eu estou pensando , vc pode fazer isso usar substring ou subsequence para pegar

ex?:

String resultado="andrerua03casa05999999999";

String nome=resultado.subString(0,4);
String rua=resultado.subString(x,x);
....

Mas isso só pode ser feito s3e o tamanho da string for sempre o mesmo, caso contrário , vc pode usar um separador , então vc pode usar um BufferStyring ou coisa assim para separa quando tiver um separador padrão , como um ponto , assim fica mais dinâmico o código, doque substrting

eu tenho que respeitar um certo layout para esse string pq tenho q gravar um arquivo q vai ser lido… lá não tem separador… o que eu tinha q fazer era grava nas posiçoes certas… tipo nome começa na 0 e termina na 30 sempre assim…

poxa mais como eu vou fazer para sempre saber o tamanho desse valor adicional… eu quero gravar um arquivo apartir desse string… e tem q ter esse layout :cry:

Trabalhe com um array de caracteres. :wink:

como assim? :?:

Suponha que seu “layout” seja:
[ Codigo (10 caracteres) | Nome (40 caracteres) ]

   char[] a = new char[50];
   
   // Acho que não precisa disso
   for(int i = 0; i < a.length; i++){
      a[i] = '';
   }
  
  String codigo = "bla";
  String nome = "Vinci";
  
  for(int j = 0; j < 10 && j < codigo.length; j++){
     a[j] = codigo.charAt(j);
  }  
  
  for(int k=10;  k < 40 + 10 && k < nome.length - 10; k++){
     a[k] = nome.charAt(k);
  }

Outra alternativa seria “truncar” cada string recebida, usando o médodo substring, e concatenar tudo no final. :wink:

A JSR-51 contample isso. deve aparecer no Tiger.

Enquanto isso, dê uma olhada em

http://java.sun.com/developer/technicalArticles/Programming/sprintf/

tenta usar RandomAccessFile…

vc pode gravar no arquivo com um tamanho fixo e depois ler com o mesmo tamanho (exatamente o q vc quer :grin: )

um ex de como se grava/le:

StringBuffer sb;
RandomAccessFile file = new RandomAccessFile(new File("arquivo.dat"), "rw"); // r eh para leitura e w para gravar
file.seek(72); // move o ponteiro do arquivo para a posicao 32
// vc pode tb fazer isso em um for, basta multiplicar a variavel sentinela (geralemnte i) pelo numero fixo dos caracteres
sb = new StringBuffer("sei lah, aqui vc poe o q vai gravar com tamanho fixo ;)");
sb.setLength(72); // essa linha eh importante, pois se a string contiver menos caracteres q o tamanho fixo, dai vai ser preenchida com espacos em branco, e caso ela "estoure" o tamanho, os ultimos caracteres serao "jogados fora"
 
file.writeChars(sb.toString());
// pra ler:
chat tmp[] = new char[72];
for (int i = 0; i < 72; i++){
 tmp[i] = file.readChar();
}
String result = new String(tmp);
System.out.println(result);