IntBir 7 karakter uzunluğuna nasıl dönüştürebilirim Stringki 123bu 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 7baş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 akapsamı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 %02diçin 0uzunluğ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ı numiç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)