A biblioteca Java tem um suporte de formatação de número muito bom (como excelente) que é acessível a partir da classe String enriquecida com StringOps :
scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
Editar pós Scala 2.10 : conforme sugerido por fommil, a partir de 2.10, também existe um interpolador de string de formatação (não suporta localização):
val expr = 123
f"$expr%07d"
f"${expr}%07d"
Editar abril de 2019:
- Se você quiser espaços iniciais, e não zero, apenas deixe de fora o
0
do especificador de formato. No caso acima, seria f"$expr%7d"
.Testado em 2.12.8 REPL. Não há necessidade de fazer a substituição da string como sugerido em um comentário, ou mesmo colocar um espaço explícito na frente de 7
como sugerido em outro comentário.
- Se o comprimento for variável,
s"%${len}d".format("123")
f"$a%07d"
(se tiver umval
/var
a
no escopo).regex
string.replaceAll("\\G0", " ")
para substituir zeros à esquerda com espaços como dito aqui"% 7d".format(123)
.Resposta curta:
Resposta longa:
Scala StringOps (que contém um bom conjunto de métodos que os objetos string Scala possuem por causa das conversões implícitas) tem um
padTo
método que anexa uma certa quantidade de caracteres à sua string. Por exemplo:Retornará "alohaaaaaa". Observe que o tipo de elemento de uma String é um Char, portanto, as aspas simples ao redor de
'a'
.Seu problema é um pouco diferente, pois você precisa preceder caracteres em vez de acrescentar los. É por isso que você precisa inverter a string, acrescentar os caracteres de preenchimento (você os estaria acrescentando agora, já que a string está invertida) e, em seguida, reverter tudo novamente para obter o resultado final.
Espero que isto ajude!
fonte
O
padding
é denotado por%02d
para0
ser prefixado para fazer o comprimento2
:fonte
val paddedVal = f"${num}%02d"
deve ser alteradonum
parai
f"$num%02d"
(sem colchetes necessários aqui)huynhjl chegou antes de mim na resposta certa, então aqui está uma alternativa:
fonte
"0000000" + Int.MaxValue takeRight 7
=>7483647
. Embora "tecnicamente" correto pela interpretação literal da pergunta, é improvável que o leitor não queira que o número preenchido ultrapasse 7 dígitos se o número for tão grande.fonte
Caso este Q&A se torne o compêndio canônico,
fonte
Você precisa lidar com números negativos? Se não, eu apenas faria
ou
Caso contrário, você pode usar
NumberFormat
:fonte