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

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

"Apple"

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

"000Apple"

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

Ответ 1

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

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

(Работает, если ваша строка не длиннее 8 символов.)

Ответ 2

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

Ответ 4

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

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

выход:

000Apple

Ответ 5

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

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

Ответ 6

Использование утилиты Guava Strings:

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

Ответ 7

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

org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")

Ответ 8

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

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

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

Ответ 9

String input = "Apple";
StringBuffer buf = new StringBuffer(input);

while (buf.length() < 8) {
  buf.insert(0, '0');
}

String output = buf.toString();

Ответ 10

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

Ответ 14

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

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

Ответ 15

Может быть быстрее, чем Ответ Криса Лерхера, когда большая часть строки в String имеет 8 char

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

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

Ответ 16

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

while(str.length() < desired_length)
  str = '0'+str;

Ответ 17

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

Ответ 18

В Java:

String zeroes="00000000";
String apple="apple";

String result=zeroes.substring(apple.length(),zeroes.length())+apple;

В Scala:

"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}

Вы также можете изучить способ в Java 8 сделать это с помощью потоков и уменьшить (подобно тому, как я это сделал с Scala). Это немного отличается от всех других решений, и мне это особенно нравится.

Ответ 19

Кто-нибудь пробовал это чистое решение 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");

К сожалению, это решение работает, только если у вас нет пробелов в строке.

Ответ 20

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

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