Jawaban:
Jika Anda harus melakukannya tanpa bantuan perpustakaan:
("00000000" + "Apple").substring("Apple".length())
(Berfungsi, selama String Anda tidak lebih dari 8 karakter.)
("0000" + theString).substring(theString.length())
lebih realistis. Ini bantalan theString
dengan nol terkemuka. Maaf tidak bisa menolak menambahkan komentar ini :)
StringBuilder
, dan dibutuhkan loop untuk mengisinya. Jika persyaratan benar-benar hanya memotong string 8-karakter yang ok, meskipun itu adalah kasus penggunaan yang sangat sempit, tetapi solusi ini tidak pernah bisa disebut cepat. Itu hanya singkat.
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
alih-alih %07d
, Anda akan mendapatkan FormatFlagsConversionMismatchException
. kamu bisa mencobanya.
StringUtils.leftPad(yourString, 8, '0');
Ini dari commons-lang . Lihat javadoc
Inilah yang dia benar-benar minta, saya yakin:
String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple");
keluaran:
000Apple
DuplicateFormatFlagsException
(karena 00
dalam format string). Jika Anda mengganti string yang lebih panjang dari 8 karakter, ini menghasilkan IllegalFormatFlagsException
(karena angka negatif).
String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);
? Sekarang Anda tidak akan memiliki pengecualian ini.
String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(0,8);
itu SALAH, seharusnya begitu String.format("%0"+ (9 - "Apple".length() )+"d%s",0 ,"Apple").substring(1,9);
.
Anda dapat menggunakan metode String.format seperti yang digunakan dalam jawaban lain untuk menghasilkan string 0,
String.format("%0"+length+"d",0)
Ini dapat diterapkan untuk masalah Anda dengan secara dinamis menyesuaikan jumlah 0 di dalam string format:
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);
}
Ini masih merupakan solusi yang berantakan, tetapi memiliki keuntungan bahwa Anda dapat menentukan panjang total dari string yang dihasilkan menggunakan argumen integer.
Menggunakan Strings
kelas utilitas Guava :
Strings.padStart("Apple", 8, '0');
Saya sudah dalam situasi yang sama dan saya menggunakan ini; Cukup ringkas dan Anda tidak perlu berurusan dengan panjang atau perpustakaan lain.
String str = String.format("%8s","Apple");
str = str.replace(' ','0');
Sederhana dan rapi. Format string kembali " Apple"
jadi setelah mengganti spasi dengan nol, ini memberikan hasil yang diinginkan.
String input = "Apple";
StringBuffer buf = new StringBuffer(input);
while (buf.length() < 8) {
buf.insert(0, '0');
}
String output = buf.toString();
Gunakan Apache Commons StringUtils.leftPad (atau lihat kode untuk membuat fungsi Anda sendiri).
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);
}
}
Anda mungkin harus menjaga edgecase. Ini adalah metode generik.
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;
}
}
Di Jawa:
String zeroes="00000000";
String apple="apple";
String result=zeroes.substring(apple.length(),zeroes.length())+apple;
Dalam Scala:
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}
Anda juga dapat menjelajahi cara di Java 8 untuk melakukannya menggunakan aliran dan mengurangi (mirip dengan cara saya melakukannya dengan Scala). Ini sedikit berbeda dengan semua solusi lain dan saya sangat menyukainya.
Bisa lebih cepat daripada Chris Lercher menjawab ketika sebagian besar di String memiliki 8 karakter
int length = in.length();
return length == 8 ? in : ("00000000" + in).substring(length);
dalam kasus saya di komputer saya 1/8 lebih cepat.
Adakah yang mencoba solusi Java murni ini (tanpa 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");
Sayangnya solusi ini hanya berfungsi jika Anda tidak memiliki spasi kosong dalam sebuah string.
Jika Anda ingin menulis program dalam Java murni, Anda dapat mengikuti metode di bawah ini atau ada banyak Utilitas Tali untuk membantu Anda lebih baik dengan fitur yang lebih canggih.
Dengan menggunakan metode statis sederhana, Anda dapat mencapainya seperti di bawah ini.
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;
}
Anda dapat menggunakan metode di atas addLeadingText(length, padding text, your text)
addLeadingText(8, "0", "Apple");
Outputnya akan menjadi 000Apple
Itu tidak cantik, tetapi berhasil. Jika Anda memiliki akses apache commons saya sarankan menggunakannya
if (val.length() < 8) {
for (int i = 0; i < val - 8; i++) {
val = "0" + val;
}
}