जवाबों:
यदि आपको पुस्तकालय की मदद के बिना यह करना है:
("00000000" + "Apple").substring("Apple".length())
(कार्य करता है, जब तक कि आपका स्ट्रिंग 8 वर्णों से अधिक लंबा नहीं है।)
("0000" + theString).substring(theString.length())
अधिक यथार्थवादी है। theString
अग्रणी शून्य के साथ यह पैड । क्षमा करें इस टिप्पणी को जोड़ने का विरोध नहीं कर सकता :)
StringBuilder
, और इसे भरने के लिए लूप लेता है। यदि आवश्यकता वास्तव में केवल 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 विधि का उपयोग कर सकते हैं,
String.format("%0"+length+"d",0)
इसे प्रारूप 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');
मैं एक समान स्थिति में रहा हूं और मैंने इसका उपयोग किया है; यह काफी संक्षिप्त है और आपको लंबाई या किसी अन्य लाइब्रेरी से निपटने की आवश्यकता नहीं है।
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();
Apache Commons StringUtils.leftPad का उपयोग करें (या अपना स्वयं का फ़ंक्शन बनाने के लिए कोड देखें)।
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);
}
}
आपको edgecase का ध्यान रखना पड़ सकता है। यह एक सामान्य विधि है।
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");
आउटपुट 000Apple होगा
यह सुंदर नहीं है, लेकिन यह काम करता है। यदि आपके पास अपाचे कॉमन्स हैं, तो मेरा सुझाव है कि इसका उपयोग करें
if (val.length() < 8) {
for (int i = 0; i < val - 8; i++) {
val = "0" + val;
}
}