Как отформатировать строку 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; } } 
Interesting Posts

Сохранить int в массиве char?

Как настроить разрешение экрана, сообщаемое в приложение JavaScript веб-браузером?

Как нарисовать форму волны музыкального плеера Android?

Macbook pro перезагружается во время первого процесса загрузки

Asp.Net MVC: Почему мой взгляд передает NULL модели обратно на мой controller?

Почему я не могу иметь нецелый статический член const в classе?

Класс controllerа JavaFX не работает

Как настроить автозаполнение в excel2010

Java получает ошибку для реализации интерфейса с более слабым доступом

Помимо EAR и EJB, что я получаю с сервера приложений Java EE, который я не получаю в контейнере сервлетов, таком как Tomcat?

какая разница между Environment.Exit () и Application.Shutdown ()?

Есть ли способ для виртуализации Mac OSX в Windows?

Что означает ошибка компиляции «Не могу найти символ»?

Два командных файла не будут работать вместе, в чем проблема?

Как применить цвет в уценке

Давайте будем гением компьютера.