Как я могу преобразовать Int
в 7-символьный String
, чтобы 123
он превратился в "0000123"
?
string
scala
formatting
int
Иван
источник
источник
f"$a%07d"
(если у вас естьval
/var
a
in).regex
string.replaceAll("\\G0", " ")
"% 7d".format(123)
.Короткий ответ:
"1234".reverse.padTo(7, '0').reverse
Длинный ответ:
Scala StringOps (который содержит хороший набор методов, которые есть у строковых объектов Scala из-за неявных преобразований) имеет
padTo
метод, который добавляет к вашей строке определенное количество символов. Например:"aloha".padTo(10,'a')
Вернет "алохаааааа". Обратите внимание, что типом элемента String является Char, поэтому символы
'a'
.Ваша проблема немного отличается, поскольку вам нужно добавлять символы вместо их добавления . Вот почему вам нужно перевернуть строку, добавить символы заполнения (вы бы добавили их сейчас, поскольку строка перевернута), а затем снова переверните все это, чтобы получить окончательный результат.
Надеюсь это поможет!
источник
padding
Обозначается%02d
для0
быть абсолютными, чтобы длина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"
следует заменитьnum
наi
f"$num%02d"
(скобки здесь не нужны)huynhjl опередил меня и дал правильный ответ, поэтому вот альтернатива:
"0000000" + 123 takeRight 7
источник
"0000000" + Int.MaxValue takeRight 7
=>7483647
. Хотя "технически" правильно с точки зрения буквального толкования вопроса, маловероятно, что читатель не захочет, чтобы дополненное число превышало 7 цифр, если число такое большое.def leftPad(s: String, len: Int, elem: Char): String = { elem.toString * (len - s.length()) + s }
источник
Если эти вопросы и ответы станут каноническим сборником,
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
источник
Вам нужно иметь дело с отрицательными числами? Если нет, я бы просто сделал
def str(i: Int) = (i % 10000000 + 10000000).toString.substring(1)
или
def str(i: Int) = { val f = "000000" + i; f.substring(f.length() - 7) }
В противном случае вы можете использовать
NumberFormat
:val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US) nf.setMinimumIntegerDigits(7) nf.setGroupingUsed(false) nf.format(-123)
источник