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
в случае, если этот 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