मैं बाईं ओर शून्य के साथ एक पूर्णांक कैसे पैड कर सकता हूं?


1021

intजब Stringआप जावा में परिवर्तित करते हैं तो आप शून्य से पैड को कैसे छोड़ते हैं ?

मैं मूल रूप 9999से अग्रणी शून्य (जैसे 1 = 0001) के साथ पूर्णांक को पैड करना चाहता हूं ।


2
हाँ, यह बात है! मेरा बुरा ... मैंने इसे अपने फोन पर टाइप किया। आपको "नई स्ट्रिंग" की आवश्यकता नहीं है: Integer.toString (संख्या + 10000) .subString (1) काम करता है।
रंडैया

। Long.valueOf ( "00,003,400") toString (); । Integer.valueOf ( "00,003,400") toString (); --- ३४००
२०'१५ को फ्रीकेले

1
यह भी देखें stackoverflow.com/questions/35521278/… आरेख के साथ एक समाधान के लिए
bvdb

new String(Integer.toString(num + 10000)).substring(1)दृष्टिकोण के साथ एक समस्या है अगर numकोई 9999 से बड़ा है, हालांकि, आई.जे.एस.
फेल्पे

जवाबों:


1693

java.lang.String.format(String,Object...)इस तरह का उपयोग करें:

String.format("%05d", yournumber);

5. की लंबाई के साथ शून्य-गद्दी के लिए 5. हेक्साडेसिमल आउटपुट के रूप में dएक के साथ बदलें ।x"%05x"

पूर्ण स्वरूपण विकल्प के भाग के रूप में प्रलेखित हैं java.util.Formatter


1
क्या मुझे String.formatC में प्रिंटफ () के विकल्प होने की उम्मीद करनी चाहिए ?
एहतेश चौधरी

13
यदि आपको मूल्यों की एक बड़ी सूची के लिए ऐसा करना है, तो DecimalFormat का प्रदर्शन String.format () से कम से कम 3 गुना बेहतर है। मैं कुछ प्रदर्शन खुद करने की प्रक्रिया में हूं और विजुअल वीएम में दो को चलाने से स्ट्रिंगरफॉर्मफॉर्म () विधि का पता चलता है जो सीपीयू समय को लगभग 3-4 गुना डिस्मिलफॉर्मैट.फॉर्मैट () की दर से जमा करता है।
स्टीव फर्ग्यूसन

10
और 9 से अधिक शून्य जोड़ने के लिए कुछ का उपयोग करें जैसे%012d
मोहम्मद बानसीद

2
यह जावा 5 और इसके बाद के संस्करण के लिए है। 1.4 और निम्न के लिए DecimalFormat एक विकल्प है जैसा कि यहाँ दिखाया गया है javadevnotes.com/java-integer-to-string-with-leading-zeros
JavaDev

1
हाय दोस्तों! मुझे कुछ समस्याओं का उपयोग करना है:%d can't format java.lang.String arguments
Helio Soares Junior

115

चलो आप प्रिंट करना चाहते कहना 11रूप में011

आप एक फ़ॉर्मेटर इस्तेमाल कर सकते हैं : "%03d"

यहां छवि विवरण दर्ज करें

आप इस फ़ॉर्मेटर का उपयोग इस तरह कर सकते हैं:

int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);

वैकल्पिक रूप से, कुछ जावा तरीके सीधे इन स्वरूपकों का समर्थन करते हैं:

System.out.printf("%03d", a);

5
@ उमर कूही वास्तव में, लेकिन यह "जादू स्थिरांक" के पीछे के तर्क की व्याख्या करता है।
bvdb

अच्छा उत्तर! बस एक टिप्पणी, Fप्रारूप की () होना चाहिए f: String.format(...);
डेविड मिगुएल

क्या होगा अगर मैं एक प्रमुख 0 को जोड़ना चाहता हूं, लेकिन एक और पत्र / संख्या? धन्यवाद
चिपरोर्टिज़

1
@chiperortiz afaik उपरोक्त फ़ॉर्मेटिंग टूल के साथ संभव नहीं है। उस स्थिति में, मैं आवश्यक प्रमुख पात्रों (जैसे int prefixLength = requiredTotalLength - String.valueOf(numericValue).length) की गणना करता हूं , और फिर आवश्यक उपसर्ग बनाने के लिए एक दोहराने स्ट्रिंग विधि का उपयोग करता हूं । तार दोहराने के विभिन्न तरीके हैं, लेकिन एक देशी जावा एक नहीं है, afaik: stackoverflow.com/questions/1235179/…
bvdb

114

यदि आप किसी भी कारण से पूर्व 1.5 जावा का उपयोग करते हैं तो Apache Commons Lang विधि के साथ प्रयास कर सकते हैं

org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')

29

यह उदाहरण मिला ... परीक्षण करेंगे ...

import java.text.DecimalFormat;
class TestingAndQualityAssuranceDepartment
{
    public static void main(String [] args)
    {
        int x=1;
        DecimalFormat df = new DecimalFormat("00");
        System.out.println(df.format(x));
    }
}

यह परीक्षण किया और:

String.format("%05d",number);

दोनों काम करते हैं, मेरे उद्देश्य से मुझे लगता है कि स्ट्रिंग.फॉर्म बेहतर और अधिक रसीला है।


1
हां, मैं DecimalFormat का सुझाव देने जा रहा था क्योंकि मुझे String.format के बारे में पता नहीं था, लेकिन फिर मैंने uzhin का उत्तर देखा। String.format नया होना चाहिए।
पॉल टॉम्बलिन

यह इसी तरह है कि आप इसे कैसे करते हैं। नेट को छोड़कर। नेट तरीका छोटी संख्या के लिए अच्छा लगता है।
उमर कूहेजी

मेरे मामले में मैंने पहला विकल्प इस्तेमाल किया (DecimalFormat) क्योंकि मेरा नंबर एक डबल था
mauronet

21

यदि आपके मामले में प्रदर्शन महत्वपूर्ण है, तो आप इसे String.formatफ़ंक्शन की तुलना में कम ओवरहेड के साथ खुद कर सकते हैं :

/**
 * @param in The integer value
 * @param fill The number of digits to fill
 * @return The given value left padded with the given number of digits
 */
public static String lPadZero(int in, int fill){

    boolean negative = false;
    int value, len = 0;

    if(in >= 0){
        value = in;
    } else {
        negative = true;
        value = - in;
        in = - in;
        len ++;
    }

    if(value == 0){
        len = 1;
    } else{         
        for(; value != 0; len ++){
            value /= 10;
        }
    }

    StringBuilder sb = new StringBuilder();

    if(negative){
        sb.append('-');
    }

    for(int i = fill; i > len; i--){
        sb.append('0');
    }

    sb.append(in);

    return sb.toString();       
}

प्रदर्शन

public static void main(String[] args) {
    Random rdm;
    long start; 

    // Using own function
    rdm = new Random(0);
    start = System.nanoTime();

    for(int i = 10000000; i != 0; i--){
        lPadZero(rdm.nextInt(20000) - 10000, 4);
    }
    System.out.println("Own function: " + ((System.nanoTime() - start) / 1000000) + "ms");

    // Using String.format
    rdm = new Random(0);        
    start = System.nanoTime();

    for(int i = 10000000; i != 0; i--){
        String.format("%04d", rdm.nextInt(20000) - 10000);
    }
    System.out.println("String.format: " + ((System.nanoTime() - start) / 1000000) + "ms");
}

परिणाम

खुद का कार्य: 1697ms

String.format : 38134ms


1
ऊपर DecimalFormat का उपयोग तेज होने का उल्लेख है। क्या आपके पास उस पर कोई नोट था?
पैट्रिक

@Patrick For DecimalFormat प्रदर्शन को भी देखें: stackoverflow.com/questions/8553672/…
Stephan

चौंका देने वाला! यह पागल है कि फ़ंक्शन इतना खराब काम करता है। मुझे पैड को ज़ीरो करना था और अहस्ताक्षरित किलों का संग्रह प्रदर्शित करना था जो 1 से 3 अंकों के बीच हो सकते थे। इसके लिए बिजली की तेजी से काम करने की जरूरत थी। मैंने इस सरल विधि का उपयोग किया: for( int i : data ) strData += (i > 9 ? (i > 99 ? "" : "0") : "00") + Integer.toString( i ) + "|";यह बहुत तेजी से काम किया (क्षमा करें, मैंने इसे समय नहीं दिया!)।
बुविंज़

हॉटस्पॉट को इस पर क्रैक करने के लिए पर्याप्त चलने के बाद प्रदर्शन की तुलना कैसे होती है?
फिल

16

आप Google अमरूद का उपयोग कर सकते हैं :

Maven:

<dependency>
     <artifactId>guava</artifactId>
     <groupId>com.google.guava</groupId>
     <version>14.0.1</version>
</dependency>

नमूना कोड:

String paddedString1 = Strings.padStart("7", 3, '0'); //"007"
String paddedString2 = Strings.padStart("2020", 3, '0'); //"2020"

ध्यान दें:

Guavaबहुत उपयोगी पुस्तकालय है, यह भी जो से संबंधित सुविधाओं के बहुत सारे प्रदान करता है Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, EventBus, आदि

रेफरी: अमरूद


1
ऊपर नमूना कोड केवल उपयोग है, वास्तव में नमूना कोड नहीं है। टिप्पणी यह ​​दर्शाती है, आपको "स्ट्रिंग myPaddedString = Strings.padStart (...)" की आवश्यकता होगी
जूल

2
यह विधि वास्तव में JDK String.format / MessageFormatter / DecimalFormatter की तुलना में बेहतर प्रदर्शन परिणाम देती है।
रफलामग

10

इसको आजमाओ:

import java.text.DecimalFormat; 

DecimalFormat df = new DecimalFormat("0000");
String c = df.format(9);   // 0009
String a = df.format(99);  // 0099
String b = df.format(999); // 0999

3

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

import java.text.NumberFormat;  
public class NumberFormatMain {  

public static void main(String[] args) {  
    int intNumber = 25;  
    float floatNumber = 25.546f;  
    NumberFormat format=NumberFormat.getInstance();  
    format.setMaximumIntegerDigits(6);  
    format.setMaximumFractionDigits(6);  
    format.setMinimumFractionDigits(6);  
    format.setMinimumIntegerDigits(6);  

    System.out.println("Formatted Integer : "+format.format(intNumber).replace(",",""));  
    System.out.println("Formatted Float   : "+format.format(floatNumber).replace(",",""));  
 }    
}  

2
int x = 1;
System.out.format("%05d",x);

अगर आप स्क्रीन पर सीधे फॉर्मेट किए गए टेक्स्ट को प्रिंट करना चाहते हैं।


1
लेकिन ओपी ने कभी इसके लिए नहीं कहा। आंतरिक रूप से String.formatऔर System.out.formatउसी java.util.Formatterकार्यान्वयन को कॉल करें ।
bsd

... और System.out को पुनर्निर्देशित किया जा सकता है।
फिल

1

वर्ग दशमलव का उपयोग करें, जैसे:

NumberFormat formatter = new DecimalFormat("0000"); //i use 4 Zero but you can also another number
System.out.println("OUTPUT : "+formatter.format(811)); 

OUTPUT: 0000811


1

यहां बताया गया है कि कैसे आप बिना उपयोग किए अपने स्ट्रिंग को प्रारूपित कर सकते हैं DecimalFormat

String.format("%02d", 9)

09

String.format("%03d", 19)

019

String.format("%04d", 119)

0119


0

मेरा कोड जांचें जो पूर्णांक और स्ट्रिंग के लिए काम करेगा।

मान लें कि हमारी पहली संख्या 2 है। और हम इसमें शून्य जोड़ना चाहते हैं, इसलिए अंतिम स्ट्रिंग की लंबाई 4 होगी। इसके लिए आप निम्नलिखित कोड का उपयोग कर सकते हैं

    int number=2;
    int requiredLengthAfterPadding=4;
    String resultString=Integer.toString(number);
    int inputStringLengh=resultString.length();
    int diff=requiredLengthAfterPadding-inputStringLengh;
    if(inputStringLengh<requiredLengthAfterPadding)
    {
        resultString=new String(new char[diff]).replace("\0", "0")+number;
    }        
    System.out.println(resultString);

(new char[diff])क्यों
इसहाक

replace("\0", "0")क्या है ... क्या
इसहाक

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

0

आपको क्रमांक का उपयोग करने की आवश्यकता है, निम्नलिखित कोड नंबरफार्मेट का उपयोग करता है

    int inputNo = 1;
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumIntegerDigits(4);
    nf.setMinimumIntegerDigits(4);
    nf.setGroupingUsed(false);

    System.out.println("Formatted Integer : " + nf.format(inputNo));

आउटपुट: 0001


-2
public static String zeroPad(long number, int width) {
   long wrapAt = (long)Math.pow(10, width);
   return String.valueOf(number % wrapAt + wrapAt).substring(1);
}

इस दृष्टिकोण के साथ एकमात्र समस्या यह है कि यह आपको अपनी सोच की टोपी पर लगाता है कि यह कैसे काम करता है।


5
एकमात्र समस्या? इसे नकारात्मक के numberसाथ या width18 से अधिक के साथ
आज़माएँ।

2
अच्छी बात। और मुझे लगता है कि यह अधिक से अधिक अनुरोध किया गया था क्योंकि यह चौड़ाई में छोटा हो गया था (जो स्पष्ट रूप से नहीं पूछा गया था, लेकिन आमतौर पर आवश्यक है)। यह शर्म की बात है कि जावा की (तुलनात्मक रूप से धीमी गति से) String.format () चर चौड़ाई का समर्थन नहीं करता है और पूर्णांक निर्दिष्टकों के लिए सटीक समर्थन नहीं करता है।
जॉनक्रूरर

-3

कोई पैकेज की जरूरत:

String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;

यह स्ट्रिंग को तीन वर्णों तक ले जाएगा, और चार या पाँच के लिए एक भाग को जोड़ना आसान है। मुझे पता है कि यह किसी भी तरह से सही समाधान नहीं है (खासकर यदि आप एक बड़े गद्देदार स्ट्रिंग चाहते हैं), लेकिन मुझे यह पसंद है।


1
हम्म ... मुझे यह पसंद है।
कार्तिक चुघ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.