Как отформатировать строку Java с начальным нулем?

Вот строка, например:

"Apple" 

и я хотел бы добавить ноль, чтобы заполнить 8 символов:

 "000Apple" 

Как я могу это сделать?

Если вам нужно сделать это без помощи библиотеки:

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

(Работает, если ваша строка не длиннее 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); } } 
  StringUtils.leftPad(yourString, 8, '0'); 

Это от сообщества . См. Javadoc

Это то, что он действительно просил, я верю:

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

вывод:

 000Apple 

Вы можете использовать метод 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); } 

Это по-прежнему беспорядочное решение, но имеет то преимущество, что вы можете указать общую длину результирующей строки, используя целочисленный аргумент.

Использование служебного classа Guava’s Strings :

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

Вы можете использовать это:

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

Я был в подобной ситуации, и я использовал это; Это довольно красноречиво, и вам не нужно иметь дело с длиной или другой библиотекой.

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

Простой и аккуратный. Формат String возвращает " Apple" поэтому после замены пространства нулями он дает желаемый результат.

Используйте Apache Commons StringUtils.leftPad (или посмотрите на код, чтобы сделать свою собственную функцию).

Возможно, вам придется позаботиться об 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 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); } 

Это быстро и работает для любой длины.

 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 

Может быть быстрее, чем Chris Lercher ответит, когда большинство из String имеют exacly 8 char

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

в моем случае на моей машине 1/8 быстрее.

Вот простую версию «читаемого скрипта», не используемую API-интерфейсом, которую я использую для предварительного заполнения строки. (Простой, читаемый и настраиваемый).

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

Это некрасиво, но это работает. Если у вас есть доступ к apache commons, я бы предположил, что использовать это

 if (val.length() < 8) { for (int i = 0; i < val - 8; i++) { val = "0" + val; } } 
Давайте будем гением компьютера.