Как преобразовать Int в строку заданной длины с ведущими нулями для выравнивания?



как я могу преобразовать Int до 7 символов длиной String, Так что 123 превращается в "0000123"?

538   7  

7 ответов:

библиотека Java имеет довольно хороший (как в отличном) форматирование С StringOps обогащенного класса String:

scala> "%07d".format(123)
res5: String = 0000123

scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123

редактировать сообщение Scala 2.10: как предложил fommil, начиная с 2.10, есть также интерполятор строк форматирования:

val expr = 123
f"$expr%07d"
f"${expr}%07d"

короткий ответ:

"1234".reverse.padTo(7, "0").reverse.toString

ответ:

Скала StringOps (который содержит хороший набор методов, которые имеют строковые объекты Scala из-за неявных преобразований) имеет padTo метод, который добавляет определенное количество символов в строку. Например:

"aloha".padTo(10,"a")

вернет "alohaaaaaa" (на самом деле он вернет вектор, но это не важно для этого случая).

ваш проблема немного отличается, так как вам нужно добавить символы вместо добавление них. Вот почему вам нужно перевернуть строку, добавить символы заполнения (вы бы добавляли их сейчас, так как строка перевернута), а затем снова перевернуть все это, чтобы получить окончательный результат.

надеюсь, что это помогает!

The padding обозначается %02d на 0 быть префиксом, чтобы сделать длину 2:

scala> val i = 9 
i: Int = 9

scala> val paddedVal = f"${num}%02d"
paddedVal: String = 09

scala> println(paddedVal)             
09

huynhjl избил меня до правильного ответа, так что вот альтернатива:

"0000000" + 123 takeRight 7
def leftPad(s: String, len: Int, elem: Char): String = {
 elem.toString * (len - s.length()) + s
}

в случае, если этот Q&A становится канонический сборник,

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)

Comments

    Ничего не найдено.