শীর্ষস্থানীয় শূন্য সহ জাভা স্ট্রিংটি কীভাবে বিন্যাস করবেন?


191

স্ট্রিংটি এখানে রয়েছে:

"Apple"

এবং আমি 8 টি অক্ষর পূরণ করতে শূন্য যোগ করতে চাই:

"000Apple"

আমি কীভাবে এটি করতে পারি?

উত্তর:


287

কোনও পাঠাগারের সাহায্য ছাড়াই আপনাকে এটি করতে হবে:

("00000000" + "Apple").substring("Apple".length())

(আপনার স্ট্রিং 8 টি অক্ষরের বেশি না হওয়া পর্যন্ত কাজ করে))


21
এটি বেশ চালাক - তবে "এটি পেতে" আমার প্রায় 30 সেকেন্ড সময় লেগেছে। আমি মনে করি আরও একটি পাঠযোগ্য সমাধান আরও ভাল হবে would
অ্যামি বি

2
যখন আপনি অনেক জায়গা ছাড়াই কোনও কিছুতে সফ্টওয়্যার এম্বেড করছেন এবং অতিরিক্ত পাঠাগারগুলি কেবল কোনও বিকল্প নয় তখন এটি একটি এক্সেসেলেন্ট-সমাধান। ধন্যবাদ !!
কেসি মারে

এই সংস্করণটি দ্রুত পাগল! আমি এটা ভালোবাসি.
ডাকারন

2
@ মাথু সত্যই এটি বুঝতে অসুবিধা হয় না। দুটি স্ট্রিং সংমিশ্রিত হয় (একসাথে যোগ হয়েছে) এবং এটি থেকে প্রথম 5 টি অক্ষর বের করা হয়। কোন যাদু নেই। এক্ষেত্রে খুব বুদ্ধিমান নয় (ফিক্সড স্ট্রিং অ্যাপলের জন্য) তবে বুঝতে সহজ। ("0000" + theString).substring(theString.length())আরও বাস্তববাদী। theStringশীর্ষস্থানীয় জিরো সহ এই প্যাডগুলি । দুঃখিত এই মন্তব্য যোগ করার প্রতিরোধ করতে পারেন :)
HankCa

1
এই সমাধানটির একটি সংক্ষিপ্ত বাক্য গঠন রয়েছে তবে এটি "পাগল দ্রুত" নয়। আপনি যদি ভাগ্যবান হন তবে সংকলকটি এটি অনুকূল করে তুলবে তবে মূলত এটি করার আসল "দ্রুত" উপায়টি হ'ল একটি StringBuilderএবং এটি পূরণ করতে একটি লুপ লাগে takes যদি প্রয়োজনটি কেবলমাত্র 8-টি অক্ষরের স্ট্রিংগুলি কেটে নেওয়া হয় তবে এটি খুব সংকীর্ণ ব্যবহারের ক্ষেত্রে, তবে এই সমাধানটিকে কখনই দ্রুত বলা যায় না। এটি কেবল সংক্ষিপ্ত।
ডিসি

319
public class LeadingZerosExample {
    public static void main(String[] args) {
       int number = 1500;

       // String format below will add leading zeros (the %0 syntax) 
       // to the number above. 
       // The length of the formatted string will be 7 characters.

       String formatted = String.format("%07d", number);

       System.out.println("Number with leading zeros: " + formatted);
    }
}

14
তবে আমি স্ট্রিংয়ের আগে কোনও শূন্যতার পরিবর্তে শীর্ষস্থানীয় শূন্য যুক্ত করতে চাই।
রায়

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

3
%07s পরিবর্তে @ ভারিয়াগ ব্যবহার করুন %07d, আপনি একটি পাবেন FormatFlagsConversionMismatchException। আপনি চেষ্টা করতে পারেন.
জেড এফপি

127
 StringUtils.leftPad(yourString, 8, '0');

এটি কমন্স-ল্যাং থেকেজাভাদোক দেখুন


3
কমন্স-ল্যাং ব্যবহার করবেন না কেন? এটি দরকারী অতিরিক্ত একটি লুট আছে।
বোঝো

7
এমনকি যদি আপনি কমন্স-ল্যাং ব্যবহার করতে সক্ষম না হন তবে আপনি নিজের ফাংশনটি তৈরি করতে স্ট্রিং ইউটিলস থেকে সোর্সটি অনুলিপি করতে পারবেন। এটি নির্বাচিত উত্তরের চেয়ে আরও ভাল সাধারণ সমাধান হবে। docjar.com/html/api/org/apache/commons/lang/…
কালিয়াটেক

3
লাইব্রেরিটি যদি একমাত্র পদ্ধতির জন্য ব্যবহৃত হয় তবে কী হবে? সম্ভবত যুক্ত গ্রন্থাগারটি এটি ব্যবহৃত অ্যাপ্লিকেশনটির চেয়ে বহুগুণ বড় I আমি কোনও অ্যাপ্লিকেশনটিতে কমন্স লাইব্রেরি যুক্ত না করার বেশ কয়েকটি কারণ কল্পনা করতে পারি । আমাকে ভুল করবেন না: আমি সম্মত, এতে খুব দরকারী জিনিস রয়েছে তবে আমি যদি বাহ্যিক পদ্ধতিতে কেবল একটি (বা একটি দম্পতি) লেখার প্রয়োজন না পড়ে তবে বাহ্যিক জারগুলিতে পূর্ণ একটি অ্যাপ স্টাফ করতে অনীহা আমি বুঝতে পারি।
বার্ট কিয়ার্স

2
"কেন কমন্স-ল্যাং ব্যবহার করবেন না? এর উত্তর দেওয়ার জন্য এতে দরকারী অতিরিক্ত পরিমাণের লুট রয়েছে।" একটি দৃ concrete় উদাহরণ সহ প্রশ্ন। শাওমি তার অ্যান্ড্রয়েড ডিভাইসে কমন্স-ল্যাংয়ের একটি পুরানো সংস্করণ পাঠায়। আপনার অ্যাপ্লিকেশনটিতে একটি নতুন সংস্করণ অন্তর্ভুক্ত করা ক্লাসলোডার দ্বন্দ্বের দিকে পরিচালিত করে, তাই কমন্স-ল্যাং কোনও অ্যান্ড্রয়েড প্রকল্পে আর ব্যবহার করা যাবে না।
নাচি

1
@ নাচি এমনকি পুরানো স্ট্রিংগিলস.লেফটপ্যাডের অস্তিত্ব থাকলেও
মার্টিনেজ

29

তিনি সত্যই এটিই চেয়েছিলেন যা আমি বিশ্বাস করি:

String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple"); 

আউটপুট:

000Apple

সাধারণ ক্ষেত্রে কাজ করে না; যদি আপনি 8 টি অক্ষরের দৈর্ঘ্যের স্ট্রিং (অ্যাপ্লিকেশনটির ক্ষেত্রে এটি সম্ভব) এর সাথে "অ্যাপল" প্রতিস্থাপন করেন তবে এটি একটি DuplicateFormatFlagsException( 00বিন্যাসের স্ট্রিংয়ের কারণে ) নিক্ষেপ করবে । যদি আপনি 8 টি অক্ষরের চেয়ে বেশি স্ট্রিং প্রতিস্থাপন করেন তবে এটি একটি IllegalFormatFlagsException(ঘৃণিত সংখ্যার কারণে) নিক্ষেপ করবে।
nbrooks

এর পরে আপনি ঠিক আছে, কিন্তু এই সম্পর্কে কি আছেন: String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8); । এখন আপনি এই ব্যতিক্রম হবে না।
অভিনব পুরী

শুধু যুক্ত String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);করতে চান ভুল, এটি হওয়া উচিত String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(1,9);

@ user4231709 দুর্দান্ত সমাধান! +1
ব্যবহারকারী1697575

25

স্ট্রিং.ফর্ম্যাট পদ্ধতিটি 0 এর স্ট্রিং উত্পন্ন করতে অন্য উত্তরে ব্যবহৃত হিসাবে ব্যবহার করতে পারেন,

String.format("%0"+length+"d",0)

বিন্যাসের স্ট্রিংয়ে শীর্ষস্থানীয় 0 এর সংখ্যা গতিশীলভাবে সমন্বয় করে এটি আপনার সমস্যার জন্য প্রয়োগ করা যেতে পারে:

public String leadingZeros(String s, int length) {
     if (s.length() >= length) return s;
     else return String.format("%0" + (length-s.length()) + "d%s", 0, s);
}

এটি এখনও একটি অগোছালো সমাধান, তবে এর সুবিধা রয়েছে যে আপনি একটি পূর্ণসংখ্যার যুক্তি ব্যবহার করে ফলাফলের স্ট্রিংয়ের মোট দৈর্ঘ্য নির্দিষ্ট করতে পারেন।



15

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

org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")

এখন পর্যন্ত সেরা উত্তর। অ্যাপাচি কমন্স স্ট্রিংগটিলগুলি একটি সহজ তবে অত্যন্ত সহায়ক লাইব্রেরি।
জোয়েডবার্গ

এটি অনেক সময় সাশ্রয় করেছে এবং এটি পরিষ্কার এবং পরিষ্কারও রয়েছে।
অভিষেক

9

আমি একই পরিস্থিতিতে ছিলাম এবং আমি এটি ব্যবহার করেছি; এটি বেশ সংক্ষিপ্ত এবং আপনার দৈর্ঘ্য বা অন্য কোনও গ্রন্থাগারের সাথে ডিল করতে হবে না।

String str = String.format("%8s","Apple");
str = str.replace(' ','0');

সহজ এবং ঝরঝরে। স্ট্রিং ফর্ম্যাটটি " Apple"তাই জিরো দিয়ে স্থান প্রতিস্থাপনের পরে ফিরে আসে , এটি পছন্দসই ফলাফল দেয়।


তারপরে আপনি প্রথমে স্ট্রিংটি বিভক্ত করতে চান, উপরের ক্রিয়াকলাপটি প্রথম বিভক্ত মানটির সাথে প্রয়োগ করুন, বাকী দুটি বিভক্ত মানকে সংযুক্ত করার চেয়ে।
এরদি gizgi

6
String input = "Apple";
StringBuffer buf = new StringBuffer(input);

while (buf.length() < 8) {
  buf.insert(0, '0');
}

String output = buf.toString();


1
public class PaddingLeft {
    public static void main(String[] args) {
        String input = "Apple";
        String result = "00000000" + input;
        int length = result.length();
        result = result.substring(length - 8, length);
        System.out.println(result);
    }
}

1

আপনি কিনার যত্ন নিতে হতে পারে। এটি একটি জেনেরিক পদ্ধতি।

public class Test {
    public static void main(String[] args){
        System.out.println(padCharacter("0",8,"hello"));
    }
    public static String padCharacter(String c, int num, String str){
        for(int i=0;i<=num-str.length()+1;i++){str = c+str;}
        return str;
    }
}

1
public static void main(String[] args)
{
    String stringForTest = "Apple";
    int requiredLengthAfterPadding = 8;
    int inputStringLengh = stringForTest.length();
    int diff = requiredLengthAfterPadding - inputStringLengh;
    if (inputStringLengh < requiredLengthAfterPadding)
    {
        stringForTest = new String(new char[diff]).replace("\0", "0")+ stringForTest;
    }
    System.out.println(stringForTest);
}

1
public static String lpad(String str, int requiredLength, char padChar) {
    if (str.length() > requiredLength) {
        return str;
    } else {
        return new String(new char[requiredLength - str.length()]).replace('\0', padChar) + str;
    }
}

যতক্ষণ এই কোড স্নিপেট স্বাগত, এবং কিছু সাহায্য প্রদান করতে পারে, এটা হবে ব্যাপকভাবে উন্নত যদি এটা একটি ব্যাখ্যা অন্তর্ভুক্ত এর কিভাবে এটা প্রশ্নের ঠিকানাগুলি। তা ছাড়া, আপনার উত্তরের শিক্ষাগত মূল্য অনেক কম রয়েছে - মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, কেবল এখন যে ব্যক্তি জিজ্ঞাসা করছেন তা নয়! দয়া করে ব্যাখ্যা যুক্ত করতে আপনার উত্তর সম্পাদনা করুন, এবং কোন সীমাবদ্ধতা এবং অনুমানগুলি প্রযোজ্য তা একটি ইঙ্গিত দিন।
টবি স্পিড

1

জাভাতে:

String zeroes="00000000";
String apple="apple";

String result=zeroes.substring(apple.length(),zeroes.length())+apple;

স্কালায়:

"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}

আপনি স্ট্রিম ব্যবহার করে এটি কমাতে জাভা 8 তে কোনও উপায়ও অন্বেষণ করতে পারেন এবং হ্রাস করতে পারেন (আমি স্কালার সাথে এটির মতো করেছিলাম)। এটি অন্যান্য সমস্ত সমাধানগুলির থেকে কিছুটা আলাদা এবং আমি বিশেষত এটি অনেক পছন্দ করি।


0

এটি দ্রুত এবং যে কোনও দৈর্ঘ্যের জন্য কাজ করে।

public static String prefixZeros(String value, int len) {
    char[] t = new char[len];
    int l = value.length();
    int k = len-l;
    for(int i=0;i<k;i++) { t[i]='0'; }
    value.getChars(0, l, t, k);
    return new String(t);
}


0

এখানে স্ট্রিং প্রাক-প্যাডিংয়ের জন্য আমি ব্যবহার করি এমন সাধারণ এপিআই-কম "পঠনযোগ্য স্ক্রিপ্ট" সংস্করণ। (সাধারণ, পঠনযোগ্য এবং সামঞ্জস্যযোগ্য)।

while(str.length() < desired_length)
  str = '0'+str;

0

কেউ কি এই খাঁটি জাভা সমাধানটি (স্প্রিং ইউটিলস ছাড়াই) চেষ্টা করেছেন:

//decimal to hex string 1=> 01, 10=>0A,..
String.format("%1$2s", Integer.toString(1,16) ).replace(" ","0");
//reply to original question, string with leading zeros. 
//first generates a 10 char long string with leading spaces, and then spaces are
//replaced by a zero string. 
String.format("%1$10s", "mystring" ).replace(" ","0");

দুর্ভাগ্যক্রমে এই সমাধানটি কেবল তখনই কাজ করে যদি আপনার স্ট্রিংয়ের ফাঁকা জায়গা না থাকে।


0

আপনি যদি খাঁটি জাভাতে প্রোগ্রামটি লিখতে চান তবে আপনি নীচের পদ্ধতিটি অনুসরণ করতে পারেন বা আরও উন্নত বৈশিষ্ট্যগুলির সাথে আরও ভালভাবে আপনাকে সহায়তা করার জন্য অনেকগুলি স্ট্রিং ইউটিল রয়েছে।

একটি সাধারণ স্থিতিশীল পদ্ধতি ব্যবহার করে আপনি নীচের মতো এটি অর্জন করতে পারেন।

public static String addLeadingText(int length, String pad, String value) {
    String text = value;
    for (int x = 0; x < length - value.length(); x++) text = pad + text;
    return text;
}

আপনি উপরের পদ্ধতিটি ব্যবহার করতে পারেন addLeadingText(length, padding text, your text)

addLeadingText(8, "0", "Apple");

আউটপুটটি 000 অ্যাপল হবে


-3

এটি সুন্দর নয়, তবে এটি কার্যকর। আপনার যদি অ্যাপাচি কমেন্স অ্যাক্সেস থাকে তবে আমি সেটিকে ব্যবহার করার পরামর্শ দেব

if (val.length() < 8) {
  for (int i = 0; i < val - 8; i++) {
    val = "0" + val;
  }
}

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