นี่คือสตริงตัวอย่าง:
"Apple"
และฉันต้องการเพิ่มศูนย์เพื่อเติมเต็ม 8 ตัวอักษร:
"000Apple"
ฉันจะทำเช่นนั้นได้อย่างไร
นี่คือสตริงตัวอย่าง:
"Apple"
และฉันต้องการเพิ่มศูนย์เพื่อเติมเต็ม 8 ตัวอักษร:
"000Apple"
ฉันจะทำเช่นนั้นได้อย่างไร
คำตอบ:
ในกรณีที่คุณต้องทำโดยไม่ได้รับความช่วยเหลือจากห้องสมุด:
("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');
นี้เป็นจากคอมมอน-lang ดู javadoc
นี่คือสิ่งที่เขาขอจริงๆฉันเชื่อว่า:
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);
คุณสามารถใช้วิธีการ String.format ตามที่ใช้ในคำตอบอื่นเพื่อสร้างสตริงของ 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
คลาสยูทิลิตี้ของ Guava :
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;
}
}
ใน Java:
String zeroes="00000000";
String apple="apple";
String result=zeroes.substring(apple.length(),zeroes.length())+apple;
ในสกาล่า:
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}
คุณยังสามารถสำรวจวิธีใน Java 8 เพื่อทำโดยใช้สตรีมและลด (คล้ายกับวิธีที่ฉันใช้กับ Scala) มันแตกต่างจากโซลูชันอื่น ๆ ทั้งหมดและฉันชอบมันมากโดยเฉพาะ
นี่เร็วและใช้ได้กับทุกความยาว
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);
}
ทำได้เร็วกว่าChris Lercher ตอบเมื่อส่วนใหญ่ใน String มี exacly 8 ถ่าน
int length = in.length();
return length == 8 ? in : ("00000000" + in).substring(length);
ในกรณีของฉันบนเครื่องของฉัน 1/8 เร็วขึ้น
นี่คือเวอร์ชัน "สคริปต์ที่อ่านง่าย" แบบง่าย API ที่ฉันใช้สำหรับการเติมสายล่วงหน้า (ง่ายอ่านและปรับได้)
while(str.length() < desired_length)
str = '0'+str;
ไม่มีใครลองใช้โซลูชัน Java ที่แท้จริงนี้ (โดยไม่ต้อง SpringUtils):
//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");
น่าเสียดายที่โซลูชันนี้ใช้งานได้เฉพาะเมื่อคุณไม่มีช่องว่างในสตริง
ถ้าคุณต้องการที่จะเขียนโปรแกรมในจาวาบริสุทธิ์คุณสามารถทำตามวิธีการด้านล่างหรือมี String Utils จำนวนมากเพื่อช่วยให้คุณดีขึ้นด้วยคุณสมบัติขั้นสูงเพิ่มเติม
การใช้วิธีสแตติกแบบง่ายคุณสามารถทำได้ดังนี้
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
มันไม่สวย แต่ใช้งานได้ หากคุณมีการเข้าถึง apache ทั่วไปฉันขอแนะนำให้ใช้ที่
if (val.length() < 8) {
for (int i = 0; i < val - 8; i++) {
val = "0" + val;
}
}