আমি কীভাবে বামে জিরো দিয়ে পূর্ণসংখ্যা প্যাড করতে পারি?


1021

জাভাতে intরূপান্তরিত করার সময় আপনি জিরো দিয়ে প্যাডটি কীভাবে রেখেছেন String?

আমি মূলত 9999নেতৃস্থানীয় শূন্যগুলি (যেমন 1 = 0001) দিয়ে পূর্ণসংখ্যার প্যাড সন্ধান করছি ।


2
হ্যাঁ, এটাই! আমার খারাপ ... আমি আমার ফোনে এটি টাইপ করেছি। আপনার "নতুন স্ট্রিং" দরকার নেই: Integer.toString (num + 10000)। সাবস্ট্রিং (1) কাজ করে।
রন্ধ্যা 15

। Long.valueOf ( "00003400") toString (); । Integer.valueOf ( "00003400") toString (); ---> 3400
ফ্রিকেলে

1
আরো দেখুন stackoverflow.com/questions/35521278/... ডায়াগ্রাম সঙ্গে একটি সমাধান জন্য
bvdb

new String(Integer.toString(num + 10000)).substring(1)যদি num9999 এর চেয়ে বড় কিছু হয় তবে পদ্ধতির সাথে সমস্যা আছে i
ফ্লিপ

উত্তর:


1693

এটি ব্যবহার করুন java.lang.String.format(String,Object...):

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

5 এর দৈর্ঘ্যের সাথে শূন্য-প্যাডিংয়ের জন্য হেক্সাডেসিমাল আউটপুটটির জন্য dএকটি xহিসাবে হিসাবে প্রতিস্থাপন করুন "%05x"

সম্পূর্ণ বিন্যাস বিকল্পগুলি এর অংশ হিসাবে নথিভুক্ত করা হয় java.util.Formatter


1
String.formatসি বাছাই করা অপশনগুলি কি প্রিন্টফের সাথে সমান হবে?
এহতেশ চৌধুরী

13
যদি মানগুলির একটি বৃহত তালিকার জন্য আপনাকে এটি করতে হয়, ডেসিমাল ফর্ম্যাট এর অভিনয় স্ট্রিং. ফর্ম্যাট () এর চেয়ে কমপক্ষে 3 গুণ ভাল। আমি নিজেই কিছু পারফরম্যান্স করে যাচ্ছি এবং ভিজ্যুয়াল ভিএম-তে দুটি চালাচ্ছি, স্ট্রিং.ফর্ম্যাট () পদ্ধতিটি সিপিইউ সময়টি ডেসিমালফর্ম্যাট.ফর্ম্যাট () এর হারের প্রায় 3-4 গুণতে দেখায়।
স্টিভ ফার্গুসন

10
এবং 9 টিরও বেশি জিরো যুক্ত করতে কিছু ব্যবহার করুন%012d
মোহাম্মদ বানিসায়েদ

2
এটি জাভা 5 এবং তারপরের জন্য। ১.৪ এবং নিম্নের জন্য ডেসিমালফর্ম্যাট বিকল্প হিসাবে এখানে দেখানো হয়েছে javadevnotes.com/java-integer-to-string-with-leading-zeros
জাভাদেব

1
হাই বন্ধুরা! ব্যবহার করতে আমার কিছু সমস্যা আছে:%d can't format java.lang.String arguments
হেলিও জুনিয়র

115

আসুন আপনি মুদ্রণ করতে চান বলে 11যেমন011

আপনি একটি ফরম্যাটার ব্যবহার করতে পারে : "%03d"

এখানে চিত্র বর্ণনা লিখুন

আপনি এই ফর্ম্যাটরটি ব্যবহার করতে পারেন:

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

বিকল্পভাবে, কিছু জাভা পদ্ধতিগুলি এই বিন্যাসগুলি সরাসরি সমর্থন করে:

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

5
@ ওমর কোহেই সত্যই, তবে এটি "ম্যাজিক কনস্ট্যান্টস" এর পেছনের যুক্তি ব্যাখ্যা করে।
বিভিডিবি

চমৎকার উত্তর! শুধু একটি মন্তব্য আছে, Fবিন্যাসের () হওয়া উচিত f: String.format(...);
ডেভিড মিগুয়েল

আমি যদি একটি শীর্ষস্থানীয় 0 তবে অন্য একটি চিঠি / সংখ্যা যুক্ত করতে চাই না তবে কী হবে? ধন্যবাদ
চিপার্তেটিজ

1
@ চিপের্ত্তিজ আফিক উপরের ফর্ম্যাটিং সরঞ্জামগুলি দিয়ে এটি সম্ভব নয়। সেক্ষেত্রে আমি প্রয়োজনীয় নেতৃস্থানীয় অক্ষরগুলি (যেমন int prefixLength = requiredTotalLength - String.valueOf(numericValue).length) গণনা করি এবং তারপরে প্রয়োজনীয় উপসর্গ তৈরি করতে পুনরাবৃত্ত স্ট্রিং পদ্ধতিটি ব্যবহার করি। সেখানে স্ট্রিং পুনরাবৃত্তি বিভিন্ন উপায় আছে, কিন্তু সেখানে একটি নেটিভ জাভা এক, আমি যতদূর জানি নয়: stackoverflow.com/questions/1235179/...
bvdb

114

যদি আপনি কোনও কারণে 1.5 জাভা পূর্ব ব্যবহার করেন তবে অ্যাপাচি কমন্স ল্যাং পদ্ধতিতে চেষ্টা করতে পারেন

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

উভয়ই কাজ, আমার উদ্দেশ্যে আমি স্ট্রিং মনে করি Forফর্ম্যাটটি আরও ভাল এবং আরও সংযোগযুক্ত।


1
হ্যাঁ, আমি ডেসিমালফর্ম্যাটটি সুপারিশ করতে যাচ্ছিলাম কারণ আমি স্ট্রিং.ফর্ম্যাট সম্পর্কে জানতাম না, তবে আমি উজ্জিনের উত্তরটি দেখেছি। স্ট্রিং.ফর্ম্যাট অবশ্যই নতুন হতে হবে।
পল টমলিন

এটি কীভাবে আপনি এটি করতে চান এটি অনুরূপ N নেট নেট। অল্প সংখ্যক জন্য সুন্দর দেখায়।
ওমর কোহেজি

আমার ক্ষেত্রে আমি প্রথম বিকল্পটি (ডেসিমাল ফর্ম্যাট) ব্যবহার করেছি কারণ আমার সংখ্যাটি ডাবল
মরোনেট

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

স্ট্রিং.ফর্ম্যাট: 38134 মিমি


1
উপরে ডেসিমাল ফরম্যাটটি দ্রুত হওয়ার বিষয়টি উল্লেখ রয়েছে। আপনার কি কোনও নোট আছে?
প্যাট্রিক

: @Patrick জন্য DecimalFormat কর্মক্ষমতা দেখতে stackoverflow.com/questions/8553672/...
স্টিফেন

জঘন্য! এটি বাদাম যে ফাংশন এত খারাপ কাজ করে। আমাকে শূন্য প্যাড করতে হয়েছিল এবং স্বাক্ষরবিহীন ইনটগুলির একটি সংকলন প্রদর্শন করতে হয়েছিল যা 1 থেকে 3 অঙ্কের মধ্যে হতে পারে। এটি দ্রুত বজ্রপাত কাজ করা প্রয়োজন। আমি এই সহজ পদ্ধতিটি ব্যবহার করেছি: for( int i : data ) strData += (i > 9 ? (i > 99 ? "" : "0") : "00") + Integer.toString( i ) + "|";এটি খুব দ্রুত কাজ করেছে (দুঃখিত আমি সময়টি পেলাম না!)।
বুভিন জে

হটস্পটটিতে ক্র্যাক হওয়ার জন্য পর্যাপ্ত রান করার পরে পারফরম্যান্সটি কীভাবে তুলনা করবে?
ফিল

16

আপনি গুগল পেয়ারা ব্যবহার করতে পারেন :

ম্যাভেন:

<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
উপরে নমুনা কোডটি কেবল ব্যবহারের হয়, প্রকৃত নমুনা কোড নয়। মন্তব্যটি এর প্রতিফলন করে, আপনার প্রয়োজন হবে "স্ট্রিং মাইপ্যাডস্ট্রিং = স্ট্রিংস.প্যাডস্টার্ট (...)"
জোজি

2
এই পদ্ধতিটি আসলে জেডিকে স্ট্রিং.ফর্ম্যাট / ম্যাসেজফর্ম্যাটটার / ডেসিমাল ফরম্যাটারের চেয়ে আরও ভাল পারফরম্যান্সের ফলাফল দেয়।
রাফালমাগ


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বাস্তবায়ন কল ।
বিএসডি

... এবং 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)); 

আউটপুট: 0000811


1

আপনি কীভাবে আপনার স্ট্রিংটি ব্যবহার না করে ফর্ম্যাট করতে পারেন তা এখানে DecimalFormat

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

09

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

019

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

0119


0

আমার কোডটি পরীক্ষা করুন যা পূর্ণসংখ্যা এবং স্ট্রিংয়ের জন্য কাজ করবে।

ধরা যাক আমাদের প্রথম সংখ্যাটি ২ And

    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")কি ... কি
ইসহাক

@ আইসাক - প্রথমে আমি একটি চর অ্যারে তৈরি করেছি এবং সেই চর অ্যারেটি ব্যবহার করে আমি একটি স্ট্রিং তৈরি করেছি। তারপরে আমি নাল চরিত্রের (যা চর চরিত্রের ডিফল্ট মান) প্রতিস্থাপন করেছি "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
ভাল যুক্তি. এবং আমি অনুমান করি যে এটি অনুরোধের চেয়ে আরও বেশি কাজ করেছে যেহেতু এটি প্রস্থে ছাঁটাই হয়েছে (যা স্পষ্টভাবে জিজ্ঞাসা করা হয়নি তবে সাধারণত প্রয়োজন হয়)। এটি লজ্জার বিষয় যে জাভা (তুলনায় বেদনাদায়ক ধীর) স্ট্রিং.ফোর্ম্যাট () পরিবর্তনশীল প্রস্থকে সমর্থন করে না এবং পূর্ণসংখ্যা স্পেসিফায়ারগুলির জন্য নির্ভুলতা মোটেও সমর্থন করে না।
জনচুরিয়ার

-3

কোন প্যাকেজ প্রয়োজন:

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

এটি স্ট্রিংকে তিনটি অক্ষরে প্যাড করবে এবং চার বা পাঁচটির জন্য আরও একটি অংশ যুক্ত করা সহজ। আমি জানি এটি কোনওভাবেই সঠিক সমাধান নয় (বিশেষত যদি আপনি বড় প্যাডযুক্ত স্ট্রিং চান) তবে আমি এটি পছন্দ করি।


1
হুম ... ভাল লাগছে।
কার্তিক চাগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.