web-dev-qa-db-ja.com

先頭にゼロを付けてJava文字列をフォーマットする方法

これは、たとえばStringです。

"Apple"

そして私は8文字を埋めるためにゼロを加えたいと思います。

"000Apple"

どうすればいいの?

161
Roy

あなたがライブラリの助けを借りずにそれをしなければならない場合には:

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

(あなたのStringが8文字以下である限り有効です。)

252
Chris Lercher
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);
    }
}
288
Alex Rashkov
 StringUtils.leftPad(yourString, 8, '0');

これは commons-lang からです。 javadocを参照

112
Bozho

これが彼が本当に求めていたことです。

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

出力:

000Apple
24
user4231709

別の回答で使用されている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);
}

これはまだ面倒な解決策ですが、整数引数を使用して結果の文字列の全長を指定できるという利点があります。

23
ChadyWady

Guavaの Strings ユーティリティクラスを使う:

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

これを使うことができます:

org.Apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")
11
Bency Baby

私は同じような状況にあり、私はこれを使いました。それは非常に簡潔であり、あなたは長さや他のライブラリを扱う必要はありません。

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

シンプルできちんとした。文字列フォーマットは" Apple"を返すので、スペースをゼロに置き換えた後、それは望ましい結果を与えます。

7
Erdi İzgi
String input = "Apple";
StringBuffer buf = new StringBuffer(input);

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

String output = buf.toString();
6
robert_x44

Apache Commons StringUtils.leftPad を使用します(またはコードを調べて独自の機能を作成します)。

4
kaliatech

あなたはエッジケースを大事にしなければならないかもしれません。これは一般的な方法です。

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;
    }
}
2
bragboy
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
Fathah Rehman P
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
Nabil_H

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
Carlos
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);
    }
}
1
Arne Deutsch

これは、私が文字列の前にパディングするために使用する、単純なAPIなしの「読みやすいスクリプト」バージョンです。 (シンプル、読みやすく、調整可能).

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

これは速くて、どんな長さでもうまくいきます。

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

Chris Lercher answer より速くなる可能性があります

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

私の場合、私のマシンでは1/8速くなっています。

0
Kuguar6

誰もが(SpringUtilsなしで)この純粋なJavaソリューションを試してみました:

//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
Gico