Como formatar uma string Java com zero à esquerda?

Aqui está o String, por exemplo:

"Apple" 

e gostaria de adicionar zero para preencher 8 caracteres:

 "000Apple" 

Como posso fazer isso?

Caso você tenha que fazer isso sem a ajuda de uma biblioteca:

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

(Funciona, desde que sua String não tenha mais de 8 caracteres).

 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); } } 
  StringUtils.leftPad(yourString, 8, '0'); 

Isso é do commons-lang . Veja javadoc

Isso é o que ele estava realmente pedindo, eu acredito:

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

saída:

 000Apple 

Você pode usar o método String.format como usado em outra resposta para gerar uma string de 0,

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

Isso pode ser aplicado ao seu problema, ajustando dinamicamente o número de 0s principais em uma string de formato:

 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); } 

Ainda é uma solução confusa, mas tem a vantagem de poder especificar o comprimento total da string resultante usando um argumento inteiro.

Usando a class de utilitários Guava’s Strings :

 Strings.padStart("Apple", 8, '0'); 

Você pode usar isto:

 org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0") 
 String input = "Apple"; StringBuffer buf = new StringBuffer(input); while (buf.length() < 8) { buf.insert(0, '0'); } String output = buf.toString(); 

Eu estive em uma situação semelhante e usei isso; É bastante conciso e você não tem que lidar com comprimento ou outra biblioteca.

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

Simples e arrumado. O formato String retorna " Apple" portanto, depois de replace o espaço por zeros, ele fornece o resultado desejado.

Use o Apache Commons StringUtils.leftPad (ou observe o código para fazer sua própria function).

Você pode ter que cuidar de edgecase. Este é um método genérico.

 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 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); } } 
 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); } 

Isso é rápido e funciona para qualquer tamanho.

 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 

Pode ser mais rápido do que Chris Lercher responder quando a maioria de na String tem 8 caracteres

 int length = in.length(); return length == 8 ? in : ("00000000" + in).substring(length); 

no meu caso na minha máquina 1/8 mais rápido.

Aqui está a versão simples “script legível” sem API que eu uso para pre-padding de uma string. (Simples, legível e ajustável).

 while(str.length() < desired_length) str = '0'+str; 
 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; } } 

Não é bonito, mas funciona. Se você tiver access ao apache commons, eu sugiro que use isso

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