Bagaimana cara mengubah panjang Intmenjadi 7 karakter String, sehingga 123diubah 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:
0dari 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 7seperti yang disarankan dalam komentar lain.s"%${len}d".format("123")f"$a%07d"(jika Anda memiliki val/ var adalam 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 padTometode, 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 paddingdilambangkan dengan %02duntuk 0menjadi 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 numuntuki
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)