Pustaka Java memiliki dukungan pemformatan angka yang cukup bagus (seperti sangat baik) yang dapat diakses dari kelas String yang diperkaya StringOps :
scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
Edit posting Scala 2.10 : seperti yang disarankan oleh fommil, dari 2.10 ke atas, ada juga interpolator string format (tidak mendukung pelokalan):
val expr = 123
f"$expr%07d"
f"${expr}%07d"
Sunting Apr 2019:
- Jika Anda menginginkan spasi di depan, dan bukan nol, biarkan saja
0
dari penentu format. Dalam kasus di atas, itu akan f"$expr%7d"
.Diuji di 2.12.8 REPL. Tidak perlu melakukan penggantian string seperti yang disarankan dalam komentar, atau bahkan meletakkan spasi eksplisit di depan 7
seperti yang disarankan dalam komentar lain.
- Jika panjangnya bervariasi,
s"%${len}d".format("123")
f"$a%07d"
(jika Anda memilikival
/var
a
dalam cakupan).regex
string.replaceAll("\\G0", " ")
untuk menggantikan nol dengan spasi terkemuka seperti yang diceritakan di sini"% 7d".format(123)
.Jawaban singkat:
Jawaban panjang:
Scala StringOps (yang berisi sekumpulan metode bagus yang dimiliki objek string Scala karena konversi implisit) memiliki
padTo
metode, yang menambahkan sejumlah karakter ke string Anda. Sebagai contoh:Akan mengembalikan "alohaaaaaa". Perhatikan jenis elemen String adalah Char, maka tanda kutip tunggal di sekitar
'a'
.Masalah Anda sedikit berbeda karena Anda perlu menambahkan karakter daripada menambahkannya . Itulah mengapa Anda perlu membalikkan string, menambahkan karakter pengisi (Anda akan membuatnya sekarang karena string dibalik), dan kemudian membalikkan semuanya lagi untuk mendapatkan hasil akhir.
Semoga ini membantu!
sumber
Itu
padding
dilambangkan dengan%02d
untuk0
menjadi diawali untuk membuat panjang2
:sumber
val paddedVal = f"${num}%02d"
harus diubahnum
untuki
f"$num%02d"
(tidak perlu tanda kurung di sini)huynhjl mengalahkan saya dengan jawaban yang benar, jadi inilah alternatifnya:
sumber
"0000000" + Int.MaxValue takeRight 7
=>7483647
. Meskipun "secara teknis" benar dengan interpretasi literal dari pertanyaan tersebut, kecil kemungkinan pembaca tidak ingin nomor yang diisi melebihi 7 digit jika angkanya sebesar itu.sumber
Jika Tanya Jawab ini menjadi ringkasan kanonik,
sumber
Apakah Anda perlu menangani angka negatif? Jika tidak, saya akan melakukannya
atau
Jika tidak, Anda dapat menggunakan
NumberFormat
:sumber