संरेखित करने के लिए अग्रणी शून्य के साथ एक इंट को एक स्ट्रिंग में परिवर्तित करने के लिए कैसे?


98

मैं Intएक 7-वर्ण को लंबे समय तक कैसे बदल सकता हूं String, ताकि 123इसे बदल दिया जाए "0000123"?

जवाबों:


221

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")

6
बेन, dhg, upvotes के लिए धन्यवाद, आप लोग एक कठिन भीड़ हैं! मुझे लगता है कि हम अभी भी अन्य उत्तरों से कुछ सीख सकते हैं, और मतदान प्रणाली इस बात का ध्यान रखती है कि कौन सा उत्तर प्रासंगिक है।
हुइन्हज्ल

8
आपको यह स्पष्ट करने की आवश्यकता नहीं है, आप लिख सकते हैं f"$a%07d"(यदि आपके पास एक val/ var aदायरा है)।
fommil

1
@fommil, वास्तव में, यह तब तक नहीं था जब मैंने प्रारंभिक उत्तर पोस्ट किया था, लेकिन मैं अब एफ इंटरपोलर का भी उपयोग करूंगा जो कि मौजूद है।
हुइन्हज्ल

यदि आप चाहते हैं अग्रणी रिक्त स्थान के बजाय अग्रणी शून्य तो आप उपयोग कर सकते हैं regex string.replaceAll("\\G0", " ")प्रमुख स्थान के साथ शून्य को बदलने के लिए के रूप में बताया यहाँ
Y2K-शुभम

1
यदि आप अग्रणी शून्य के बजाय अग्रणी स्थान चाहते हैं तो उपयोग करें । "% 7d".format(123)
एरिक वैन ओस्टेन

36

संक्षिप्त जवाब:

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

लंबा जवाब:

Scala StringOps (जिसमें विधियों का एक अच्छा सेट होता है जो Scala string ऑब्जेक्ट्स निहितार्थ रूपांतरण के कारण होता है) में एक padToविधि होती है, जो आपके स्ट्रिंग में कुछ निश्चित वर्णों को जोड़ देती है। उदाहरण के लिए:

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

"अलोहाहा" लौटाएगा। नोट एक स्ट्रिंग का तत्व प्रकार एक चार है, इसलिए एकल उद्धरण के आसपास है 'a'

आपकी समस्या थोड़ी अलग है क्योंकि आप की जरूरत है पहले जोड़ें के बजाय पात्रों जोड़कर उन्हें। इसलिए आपको स्ट्रिंग को उल्टा करने की आवश्यकता है, भरण-वर्णों को संलग्न करें (स्ट्रिंग के उलट होने के बाद अब आप उन्हें पहले से तैयार कर रहे होंगे), और फिर अंतिम परिणाम प्राप्त करने के लिए फिर से पूरी चीज़ को उलट दें।

उम्मीद है की यह मदद करेगा!


14
एक स्ट्रिंग में वापस जाने के लिए .mkString का उपयोग करें
samthebest

2
या चरित्र 'ए' का उपयोग करें
लॉरेंस वेगरफील्ड

29

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
mjbsgll

f"$num%02d"(यहां कोई कोष्ठक नहीं लगाया गया)
हार्टमुट पी।

9

हुइन्हज्ल ने मुझे सही उत्तर के लिए हराया, इसलिए यहां एक विकल्प है:

"0000000" + 123 takeRight 7

यह 10M: "0000000" + Int.MaxValue takeRight 7=> से अधिक संख्या के लिए विफल हो जाएगा 7483647। प्रश्न की शाब्दिक व्याख्या द्वारा "तकनीकी रूप से" सही होने के बावजूद, यह संभावना नहीं है कि पाठक चाहता है कि गद्देदार संख्या 7 अंकों से आगे न बढ़े यदि संख्या इतनी बड़ी हो।
एमिल लुंडबर्ग

वैसे आप कह सकते हैं कि यह समाधान बेहतर है क्योंकि स्वीकृत समाधान के विपरीत, कम से कम अंक अभी भी उस विशेष मामले में सही ढंग से संरेखित हैं। प्रश्न का पूरा बिंदु अंकों को ठीक से संरेखित करना है।
लुइगी प्लिंज

3
def leftPad(s: String, len: Int, elem: Char): String = {
 elem.toString * (len - s.length()) + s
}

1

यदि यह प्रश्नोत्तर एक विहित संकलन बन जाता है,

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

1

क्या आपको नकारात्मक संख्याओं से निपटने की आवश्यकता है? यदि नहीं, तो मैं बस करूँगा

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.