Tem um detalhe aí, não basta dividir “80 - tamanho da string” por 2.
Por exemplo, se a string tiver 3 caracteres, e você divide 80 - 3 por 2 (arredondando), dá 38.
Mas se colocar 38 pontos de cada lado da palavra, você terá 38 antes, 38 depois e mais os 3 caracteres da palavra, totalizando 79.
Quando o tamanho da string é ímpar, você tem que adicionar um ponto a mais (aí você decide se vai ser antes ou depois). Não tem jeito, vai ficar desalinhado (pois não tem como alinhar “meio caractere”). Claro, tudo isso assumindo que a quantidade de colunas é par (vamos manter assim para simplificar).
Outro detalhe é que para adicionar os pontos antes e depois, em vez de concatenar strings em um loop, você pode usar StringBuilder
, que é mais eficiente em loops (se comparado à concatenação com +
). Então ficaria assim:
int colunas = 80; // total de colunas
String palavra = "saladas";
int preenchimento = (colunas - palavra.length()) / 2;
int extra = palavra.length() % 2; // caso o tamanho da string seja ímpar, tem um caractere a mais para adiconar no final
StringBuilder sb = new StringBuilder();
// pontos antes
for (int i = 0; i < preenchimento; i++) {
sb.append('.');
}
// a própria palavra
sb.append(palavra);
// decidi adicionar o ponto extra no fim (mas poderia ser no início se quiser)
for (int i = 0; i < preenchimento + extra; i++) {
sb.append('.');
}
System.out.println(sb.toString());
Escolhi uma palavra com tamanho ímpar (“saladas”) para mostrar o que acontece. No caso, a saída é:
....................................saladas.....................................
Ou seja, 36 pontos antes e 37 depois (mais os 7 caracteres da palavra, totalizando 80 colunas). Se quiser que o ponto a mais fique no início, basta trocar os dois for
de lugar.
Se o tamanho da palavra for par, aí terá a mesma quantidade de pontos antes e depois. Como já dito, isso só vale se o total de colunas também for par (se for ímpar, aí você teria que fazer outra verificação juntamente com o tamanho da palavra, para saber se a combinação de ambos resultará nesse caractere a mais ou não).