Câu trả lời:
Thư viện Java có hỗ trợ định dạng số khá tốt (như là tuyệt vời) có thể truy cập được từ lớp String được làm giàu StringOps :
scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
Chỉnh sửa bài đăng Scala 2.10 : theo đề xuất của fommil, từ 2.10 trở đi, cũng có bộ nội suy chuỗi định dạng (không hỗ trợ bản địa hóa):
val expr = 123
f"$expr%07d"
f"${expr}%07d"
Chỉnh sửa tháng 4 năm 2019:
0
từ công cụ định dạng. Trong trường hợp trên, nó sẽ được f"$expr%7d"
Kiểm tra trong 2.12.8 REPL. Không cần thực hiện thay thế chuỗi như được đề xuất trong một nhận xét, hoặc thậm chí đặt một khoảng trắng rõ ràng trước 7
như được đề xuất trong một nhận xét khác.s"%${len}d".format("123")
f"$a%07d"
(nếu bạn có val
/ var
a
trong phạm vi).
regex
string.replaceAll("\\G0", " ")
để thay thế số không với không gian hàng đầu như đã nói ở đây
"% 7d".format(123)
.
Câu trả lời ngắn:
"1234".reverse.padTo(7, '0').reverse
Câu trả lời dài:
Scala StringOps (chứa một tập hợp các phương thức tuyệt vời mà các đối tượng chuỗi Scala có được do các chuyển đổi ngầm định) có một padTo
phương thức gắn một lượng ký tự nhất định vào chuỗi của bạn. Ví dụ:
"aloha".padTo(10,'a')
Sẽ trở lại "alohaaaaaa". Lưu ý rằng loại phần tử của Chuỗi là Char, do đó các dấu ngoặc kép xung quanh'a'
.
Vấn đề của bạn hơi khác một chút vì bạn cần thêm các ký tự trước thay vì thêm vào chúng. Đó là lý do tại sao bạn cần đảo ngược chuỗi, nối các ký tự điền vào (bạn sẽ thêm chúng ngay bây giờ vì chuỗi được đảo ngược), rồi đảo ngược lại toàn bộ để có kết quả cuối cùng.
Hi vọng điêu nay co ich!
Ký padding
hiệu là %02d
for 0
được đặt tiền tố để tạo độ dài 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"
nên được thay đổi num
choi
f"$num%02d"
(không cần dấu ngoặc ở đây)
huynhjl đánh cho tôi câu trả lời đúng, vì vậy đây là một giải pháp thay thế:
"0000000" + 123 takeRight 7
"0000000" + Int.MaxValue takeRight 7
=> 7483647
. Mặc dù đúng "về mặt kỹ thuật" theo cách hiểu theo nghĩa đen của câu hỏi, nhưng không chắc người đọc không muốn số đệm kéo dài quá 7 chữ số nếu con số lớn như vậy.
Trong trường hợp Câu hỏi & Đáp này trở thành bản tóm tắt chính tắc,
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
Bạn có cần phải đối phó với số âm không? Nếu không, tôi sẽ làm
def str(i: Int) = (i % 10000000 + 10000000).toString.substring(1)
hoặc là
def str(i: Int) = { val f = "000000" + i; f.substring(f.length() - 7) }
Nếu không, bạn có thể sử dụng NumberFormat
:
val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US)
nf.setMinimumIntegerDigits(7)
nf.setGroupingUsed(false)
nf.format(-123)