উত্তর:
কোনও পাঠাগারের সাহায্য ছাড়াই আপনাকে এটি করতে হবে:
("00000000" + "Apple").substring("Apple".length())
(আপনার স্ট্রিং 8 টি অক্ষরের বেশি না হওয়া পর্যন্ত কাজ করে))
("0000" + theString).substring(theString.length())
আরও বাস্তববাদী। theString
শীর্ষস্থানীয় জিরো সহ এই প্যাডগুলি । দুঃখিত এই মন্তব্য যোগ করার প্রতিরোধ করতে পারেন :)
StringBuilder
এবং এটি পূরণ করতে একটি লুপ লাগে takes যদি প্রয়োজনটি কেবলমাত্র 8-টি অক্ষরের স্ট্রিংগুলি কেটে নেওয়া হয় তবে এটি খুব সংকীর্ণ ব্যবহারের ক্ষেত্রে, তবে এই সমাধানটিকে কখনই দ্রুত বলা যায় না। এটি কেবল সংক্ষিপ্ত।
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);
}
}
%07s
পরিবর্তে @ ভারিয়াগ ব্যবহার করুন %07d
, আপনি একটি পাবেন FormatFlagsConversionMismatchException
। আপনি চেষ্টা করতে পারেন.
StringUtils.leftPad(yourString, 8, '0');
তিনি সত্যই এটিই চেয়েছিলেন যা আমি বিশ্বাস করি:
String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple");
আউটপুট:
000Apple
DuplicateFormatFlagsException
( 00
বিন্যাসের স্ট্রিংয়ের কারণে ) নিক্ষেপ করবে । যদি আপনি 8 টি অক্ষরের চেয়ে বেশি স্ট্রিং প্রতিস্থাপন করেন তবে এটি একটি IllegalFormatFlagsException
(ঘৃণিত সংখ্যার কারণে) নিক্ষেপ করবে।
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);
।
স্ট্রিং.ফর্ম্যাট পদ্ধতিটি 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);
}
এটি এখনও একটি অগোছালো সমাধান, তবে এর সুবিধা রয়েছে যে আপনি একটি পূর্ণসংখ্যার যুক্তি ব্যবহার করে ফলাফলের স্ট্রিংয়ের মোট দৈর্ঘ্য নির্দিষ্ট করতে পারেন।
পেয়ারার Strings
ইউটিলিটি ক্লাস ব্যবহার :
Strings.padStart("Apple", 8, '0');
আপনি এটি ব্যবহার করতে পারেন:
org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")
আমি একই পরিস্থিতিতে ছিলাম এবং আমি এটি ব্যবহার করেছি; এটি বেশ সংক্ষিপ্ত এবং আপনার দৈর্ঘ্য বা অন্য কোনও গ্রন্থাগারের সাথে ডিল করতে হবে না।
String str = String.format("%8s","Apple");
str = str.replace(' ','0');
সহজ এবং ঝরঝরে। স্ট্রিং ফর্ম্যাটটি " Apple"
তাই জিরো দিয়ে স্থান প্রতিস্থাপনের পরে ফিরে আসে , এটি পছন্দসই ফলাফল দেয়।
String input = "Apple";
StringBuffer buf = new StringBuffer(input);
while (buf.length() < 8) {
buf.insert(0, '0');
}
String output = buf.toString();
অ্যাপাচি কমন্স স্ট্রিংইটিলস.লফিটপ্যাড ব্যবহার করুন (বা নিজের ফাংশনটি তৈরি করতে কোডটি দেখুন)।
আপনি কিনার যত্ন নিতে হতে পারে। এটি একটি জেনেরিক পদ্ধতি।
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;
}
}
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);
}
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;
}
}
জাভাতে:
String zeroes="00000000";
String apple="apple";
String result=zeroes.substring(apple.length(),zeroes.length())+apple;
স্কালায়:
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}
আপনি স্ট্রিম ব্যবহার করে এটি কমাতে জাভা 8 তে কোনও উপায়ও অন্বেষণ করতে পারেন এবং হ্রাস করতে পারেন (আমি স্কালার সাথে এটির মতো করেছিলাম)। এটি অন্যান্য সমস্ত সমাধানগুলির থেকে কিছুটা আলাদা এবং আমি বিশেষত এটি অনেক পছন্দ করি।
স্ট্রিংয়ের বেশিরভাগের কাছে 8 টি চর থাকলে সেক্ষেত্রে ক্রিস লারচের উত্তরটি আরও দ্রুততর হতে পারে
int length = in.length();
return length == 8 ? in : ("00000000" + in).substring(length);
আমার ক্ষেত্রে আমার মেশিনে 1/8 দ্রুত।
কেউ কি এই খাঁটি জাভা সমাধানটি (স্প্রিং ইউটিলস ছাড়াই) চেষ্টা করেছেন:
//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");
দুর্ভাগ্যক্রমে এই সমাধানটি কেবল তখনই কাজ করে যদি আপনার স্ট্রিংয়ের ফাঁকা জায়গা না থাকে।
আপনি যদি খাঁটি জাভাতে প্রোগ্রামটি লিখতে চান তবে আপনি নীচের পদ্ধতিটি অনুসরণ করতে পারেন বা আরও উন্নত বৈশিষ্ট্যগুলির সাথে আরও ভালভাবে আপনাকে সহায়তা করার জন্য অনেকগুলি স্ট্রিং ইউটিল রয়েছে।
একটি সাধারণ স্থিতিশীল পদ্ধতি ব্যবহার করে আপনি নীচের মতো এটি অর্জন করতে পারেন।
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 অ্যাপল হবে
এটি সুন্দর নয়, তবে এটি কার্যকর। আপনার যদি অ্যাপাচি কমেন্স অ্যাক্সেস থাকে তবে আমি সেটিকে ব্যবহার করার পরামর্শ দেব
if (val.length() < 8) {
for (int i = 0; i < val - 8; i++) {
val = "0" + val;
}
}