Как отформатировать строку Java с нулем в начале? - PullRequest
161 голосов
/ 29 октября 2010

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

"Apple"

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

"000Apple"

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

Ответы [ 20 ]

2 голосов
/ 29 октября 2010

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

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;
    }
}
1 голос
/ 04 мая 2017
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;
    }
}
1 голос
/ 18 сентября 2018

В 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). Это немного отличается от всех других решений, и мне это особенно нравится.

1 голос
/ 24 июля 2014
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);
}
1 голос
/ 29 октября 2010
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);
    }
}
0 голосов
/ 03 мая 2017

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

while(str.length() < desired_length)
  str = '0'+str;
0 голосов
/ 23 февраля 2016

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

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

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

0 голосов
/ 29 октября 2010

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

if (val.length() < 8) {
  for (int i = 0; i < val - 8; i++) {
    val = "0" + val;
  }
}
0 голосов
/ 06 декабря 2018

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

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

0 голосов
/ 27 февраля 2015

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

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