Bagaimana cara mengubah panjang Int
menjadi 7 karakter String
, sehingga 123
diubah menjadi "0000123"
?
Jawaban:
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:
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.s"%${len}d".format("123")
f"$a%07d"
(jika Anda memiliki val
/ var
a
dalam cakupan).
regex
string.replaceAll("\\G0", " ")
untuk menggantikan nol dengan spasi terkemuka seperti yang diceritakan di sini
"% 7d".format(123)
.
Jawaban singkat:
"1234".reverse.padTo(7, '0').reverse
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:
"aloha".padTo(10,'a')
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!
Itu padding
dilambangkan dengan %02d
untuk 0
menjadi diawali untuk membuat panjang 2
:
scala> val i = 9
i: Int = 9
scala> val paddedVal = f"${num}%02d"
paddedVal: String = 09
scala> println(paddedVal)
09
val paddedVal = f"${num}%02d"
harus diubah num
untuki
f"$num%02d"
(tidak perlu tanda kurung di sini)
huynhjl mengalahkan saya dengan jawaban yang benar, jadi inilah alternatifnya:
"0000000" + 123 takeRight 7
"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.
Jika Tanya Jawab ini menjadi ringkasan kanonik,
scala> import java.text._
import java.text._
scala> NumberFormat.getIntegerInstance.asInstanceOf[DecimalFormat]
res0: java.text.DecimalFormat = java.text.DecimalFormat@674dc
scala> .applyPattern("0000000")
scala> res0.format(123)
res2: String = 0000123
Apakah Anda perlu menangani angka negatif? Jika tidak, saya akan melakukannya
def str(i: Int) = (i % 10000000 + 10000000).toString.substring(1)
atau
def str(i: Int) = { val f = "000000" + i; f.substring(f.length() - 7) }
Jika tidak, Anda dapat menggunakan NumberFormat
:
val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US)
nf.setMinimumIntegerDigits(7)
nf.setGroupingUsed(false)
nf.format(-123)