मैं Int
एक 7-वर्ण को लंबे समय तक कैसे बदल सकता हूं String
, ताकि 123
इसे बदल दिया जाए "0000123"
?
जवाबों:
Java लाइब्रेरी में बहुत अच्छा (उत्कृष्ट के रूप में) संख्या स्वरूपण समर्थन है जो StringOps से सुलभ है स्ट्रिंग वर्ग समृद्ध है:
scala> "%07d".format(123)
res5: String = 0000123
scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123
पोस्ट पोस्ट 2.10 संपादित करें : जैसा कि fommil द्वारा सुझाया गया है, 2.10 बजे से, एक प्रारूपण स्ट्रिंग प्रक्षेपक भी है (स्थानीयकरण का समर्थन नहीं करता है):
val expr = 123
f"$expr%07d"
f"${expr}%07d"
अप्रैल 2019 को संपादित करें:
0
प्रारूप निर्दिष्टकर्ता से बाहर निकलें । उपरोक्त मामले में, यह f"$expr%7d"
2.12.8 REPL में दर्ज किया जाएगा । एक टिप्पणी में सुझाए गए अनुसार स्ट्रिंग प्रतिस्थापन करने की आवश्यकता नहीं है, या यहां तक कि एक 7
अन्य टिप्पणी में सुझाए गए अनुसार एक स्पष्ट स्थान डाल दिया है।s"%${len}d".format("123")
f"$a%07d"
(यदि आपके पास एक val
/ var
a
दायरा है)।
"% 7d".format(123)
संक्षिप्त जवाब:
"1234".reverse.padTo(7, '0').reverse
लंबा जवाब:
Scala StringOps (जिसमें विधियों का एक अच्छा सेट होता है जो Scala string ऑब्जेक्ट्स निहितार्थ रूपांतरण के कारण होता है) में एक padTo
विधि होती है, जो आपके स्ट्रिंग में कुछ निश्चित वर्णों को जोड़ देती है। उदाहरण के लिए:
"aloha".padTo(10,'a')
"अलोहाहा" लौटाएगा। नोट एक स्ट्रिंग का तत्व प्रकार एक चार है, इसलिए एकल उद्धरण के आसपास है '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"
(यहां कोई कोष्ठक नहीं लगाया गया)
हुइन्हज्ल ने मुझे सही उत्तर के लिए हराया, इसलिए यहां एक विकल्प है:
"0000000" + 123 takeRight 7
"0000000" + Int.MaxValue takeRight 7
=> से अधिक संख्या के लिए विफल हो जाएगा 7483647
। प्रश्न की शाब्दिक व्याख्या द्वारा "तकनीकी रूप से" सही होने के बावजूद, यह संभावना नहीं है कि पाठक चाहता है कि गद्देदार संख्या 7 अंकों से आगे न बढ़े यदि संख्या इतनी बड़ी हो।
यदि यह प्रश्नोत्तर एक विहित संकलन बन जाता है,
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)