Alinhar arquivo texto

7 respostas
M

Boa Noite.

tenho uma arquivo texto que preciso alinhar:

arquivo.txt

nome apelido cpf idade valor
maria mariazinha 111111 20 15000,00
sebastiana bastiana 626262 9 100,00

tem alguma forma de formatar as colunas para que todas elas comecem da direita, independente do tamanho, pois qdo peço pra montar o arquivo não sei o tamanho de cada coluna.

BufferedWriter texto = new BufferedWriter(arquivo);

texto.write(" " + nome + "   " + apelido + " " + cpf + " " + idade + " " + valor + " ");

texto.newline();


porém assim esta hard-code.

caso alguem possa me ajudar, agradeço.

7 Respostas

V

Como assim, “comecem da direita”?

Flw! :thumbup:

T

Use printf ou String.format. Veja a documentação dos formatos em:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html

Exemplo:

String linha = String.format ("%-40.40s %-40.40s %-15.15s %3d %10.2f",
    nome, apelido, cpf, idade, valor);

Estou supondo que nome, apelido e cpf são strings, idade seja um int, e valor seja um double ou float.

V

Thingol, pode me explicar o que a String “%-40.40s %-40.40s %-15.15s %3d %10.2f” faz?

Vlw! :mrgreen:

T

Tá bom, você que não quer ler a documentação (e não está acostumado com a linguagem C) vai ver a explicação completa.

%-40.40s - %s = imprime string ou qualquer Object que implemente toString(), “-” = alinhado à esquerda, 40 = 40 posições reservadas, .40 (para strings) = no máximo 40 posições, depois disso passa a truncar
%-40.40s - %s = imprime string ou qualquer Object que implemente toString(), “-” = alinhado à esquerda, 40 = 40 posições reservadas, .40 (para strings) = no máximo 40 posições, depois disso passa a truncar
%-15.15s - %s = imprime string ou qualquer Object que implemente toString(), “-” = alinhado à esquerda, 15 = 15 posições reservadas, .15 (para strings) = no máximo 15 posições, depois disso passa a truncar
%3d - %d = imprime int ou long (alinhado à direita), 3 = 3 posições (afinal de contas, ninguém chegou aos 999 anos, exceto Matusalém)
%10.2f - %f = imprime float ou double (alinhado à direita), 10 = 10 posições reservadas, .2 = 2 casas depois da vírgula.

V

Os %s, %d e %f eu já conhecia, mas com números no meio, como %-40.40s, já fugiram dos meus conhecimentos! :XD:

Obrigado! :thumbup:

T

Na verdade printf (ou String.format) seriam meio inúteis se não fosse possível especificar o número de casas ou posições.

Quem conhece direitinho a história das linguagens vai ver que esses formatos esquisitos do C (e que foram copiados pelo Java) são na verdade inspirados no FORMAT do Fortran ( http://www.fortran.com/F77_std/rjcnf-13.html#sh-13 ), embora sejam um pouco mais simples . Por exemplo, D13.3 no Fortran é %13.3d no C e no Java.

M

Pessoal,

Obrigado pelas dicas,

mas realmente o que eu queria era saber se tinha alguma classe pronta que fazia isso, procurei na api e não encontrei.

então, falando com um amigo criamos uma para resolver esse caso.

public class AlinharColuna {

public static String alinhaDireita(String base, char comp, int tam) {

return base + geraComplemento(base, comp, tam);

}
public static String alinhaEsquerda(String base, char comp, int tam) {

return geraComplemento(base, comp, tam) + base;

}
private static String geraComplemento(String base, char comp, int tam) {

String resultado = “”;

if ((base == null) || (base.length() >= tam)) {

return resultado;

}

int tamanhoCompl = tam - base.length();

for (int i=0; i < tamanhoComp; i++) {

resultado = resultado + comp;

}

return resultado;

}

}

obs: a classe geraComplemento é privada, pq a intenção é somente ser usada como complemento.

dessa forma, falta apenas chamar os metodos ao ser criado o arquivo.

tks.

Criado 16 de setembro de 2008
Ultima resposta 18 de set. de 2008
Respostas 7
Participantes 3