Int
Bir 7 karakter uzunluğuna nasıl dönüştürebilirim String
ki 123
bu hale dönüştürülür "0000123"
?
Yanıtlar:
Java kitaplığı, StringOps ile zenginleştirilmiş String sınıfından erişilebilen oldukça iyi (mükemmel olduğu gibi) sayı biçimlendirme desteğine sahiptir :
scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
Scala 2.10 postasını düzenle : fommil tarafından önerildiği gibi, 2.10'dan itibaren, bir biçimlendirme dizesi interpolatörü de vardır (yerelleştirmeyi desteklemez):
val expr = 123
f"$expr%07d"
f"${expr}%07d"
Nisan 2019'u düzenleyin:
0
, biçim belirticisini atlayın. Yukarıdaki durumda, f"$expr%7d"
2.12.8 REPL'de test edilecektir . Bir yorumda önerildiği gibi dize değişimini yapmaya veya hatta 7
başka bir yorumda önerildiği gibi önüne açık bir boşluk koymaya gerek yoktur .s"%${len}d".format("123")
f"$a%07d"
(eğer bir val
/ var
a
kapsamınız varsa).
regex
string.replaceAll("\\G0", " ")
söylediği gibi alanlar ile başta sıfırları yerine burada
"% 7d".format(123)
Kısa cevap:
"1234".reverse.padTo(7, '0').reverse
Uzun cevap:
Scala StringOps (örtük dönüştürmeler nedeniyle Scala dize nesnelerinin sahip olduğu güzel bir yöntem kümesini içerir) dizenizepadTo
belirli miktarda karakter ekleyen bir yönteme sahiptir . Örneğin:
"aloha".padTo(10,'a')
"Alohaaaaaa" döndürür. Bir String öğesinin öğe türünün bir Char olduğuna dikkat edin, bu nedenle 'a'
.
Gerekirse beri senin sorunun biraz farklı öne eklemek yerine karakterleri ekleme onları. Bu nedenle, dizeyi tersine çevirmeniz, doldurma karakterlerini eklemeniz (dize ters çevrildiği için şimdi bunları başına ekleyeceksiniz) ve ardından nihai sonucu almak için her şeyi yeniden tersine çevirmeniz gerekir.
Bu yardımcı olur umarım!
padding
İle gösterilir %02d
için 0
uzunluğunu yapmak için önceden sabitlenmiş olması 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"
değişiklik olmalı num
içini
f"$num%02d"
(burada parantez yok)
huynhjl beni doğru cevaba kadar dövdü, işte bir alternatif:
"0000000" + 123 takeRight 7
"0000000" + Int.MaxValue takeRight 7
=> 7483647
. Sorunun gerçek yorumuyla "teknik olarak" doğru olsa da, okuyucunun sayı bu kadar büyükse doldurulmuş sayının 7 haneyi geçmesini istememesi olası değildir.
Bu Soru-Cevap kanonik özet haline gelirse,
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
Negatif sayılarla uğraşmanız gerekiyor mu? Değilse, sadece yapardım
def str(i: Int) = (i % 10000000 + 10000000).toString.substring(1)
veya
def str(i: Int) = { val f = "000000" + i; f.substring(f.length() - 7) }
Aksi takdirde şunları kullanabilirsiniz NumberFormat
:
val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US)
nf.setMinimumIntegerDigits(7)
nf.setGroupingUsed(false)
nf.format(-123)