整数の左側にゼロを埋め込むにはどうしたらいいですか?

java で intString に変換するとき、どのようにゼロで左詰めをしますか?

私は基本的に、9999までの整数を先頭のゼロでパッドアウトしたいのです (例: 1 = 0001).

質問へのコメント (4)
ソリューション

以下のように java.lang.String.format(String,Object...) を使用します。

String.format("%05d", yournumber);

のようにすると、長さ5のゼロパディングができます。16進数で出力する場合は、"%05x"のように dx に置き換えてください。

全てのフォーマットオプションは java.util.Formatter の一部としてドキュメント化されています。

解説 (11)

もし、何らかの理由で1.5以前のJavaを使用している場合は、Apache Commons Langのメソッドで試してみてください。

org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')
解説 (0)

11011として印刷するとします。

フォーマッターを使用できます: "%03d "

。![ここに画像の説明を入力してください](http://i.stack.imgur.com/u4vid.png。)

このフォーマッターは次のように使用できます。

int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);

または、一部のJavaメソッドはこれらのフォーマッターを直接サポートしています。

System.out.printf("%03d", a);
解説 (7)

このような例がありました...テストする

import java.text.DecimalFormat;
class TestingAndQualityAssuranceDepartment
{
    public static void main(String [] args)
    {
        int x=1;
        DecimalFormat df = new DecimalFormat("00");
        System.out.println(df.format(x));
    }
}

これをテストすると

String.format("%05d",number);

どちらも動作しますが、私の目的にはString.Formatの方がより良く、より簡潔であると思います。

解説 (4)

あなたの場合にパフォーマンスが重要な場合は、「String.format」関数と比較して、オーバーヘッドを減らして自分で行うことができます。

/**
 * @param in The integer value
 * @param fill The number of digits to fill
 * @return The given value left padded with the given number of digits
 */
public static String lPadZero(int in, int fill){

    boolean negative = false;
    int value, len = 0;

    if(in >= 0){
        value = in;
    } else {
        negative = true;
        value = - in;
        in = - in;
        len ++;
    }

    if(value == 0){
        len = 1;
    } else{         
        for(; value != 0; len ++){
            value /= 10;
        }
    }

    StringBuilder sb = new StringBuilder();

    if(negative){
        sb.append('-');
    }

    for(int i = fill; i > len; i--){
        sb.append('0');
    }

    sb.append(in);

    return sb.toString();       
}

パフォーマンス

public static void main(String[] args) {
    Random rdm;
    long start; 

    // Using own function
    rdm = new Random(0);
    start = System.nanoTime();

    for(int i = 10000000; i != 0; i--){
        lPadZero(rdm.nextInt(20000) - 10000, 4);
    }
    System.out.println("Own function: " + ((System.nanoTime() - start) / 1000000) + "ms");

    // Using String.format
    rdm = new Random(0);        
    start = System.nanoTime();

    for(int i = 10000000; i != 0; i--){
        String.format("%04d", rdm.nextInt(20000) - 10000);
    }
    System.out.println("String.format: " + ((System.nanoTime() - start) / 1000000) + "ms");
}

結果

独自の機能: 1697ms。

String.format: 38134ms。

解説 (4)

Maven:


     guava
     com.google.guava
     14.0.1

サンプルコード:

String paddedString1 = Strings.padStart("7", 3, '0'); //"007"
String paddedString2 = Strings.padStart("2020", 3, '0'); //"2020"

注意:

「グアバ」は非常に便利なライブラリであり、「コレクション」、「キャッシュ」、「機能イディオム」、「通貨」、「文字列」、「プリミティブ」、「範囲」、「IO」に関連する多くの機能も提供します。 ハッシング イベントバス `など

参照:GuavaExplained

解説 (2)

これを試してみてください。

import java.text.DecimalFormat; 

DecimalFormat df = new DecimalFormat("0000");
String c = df.format(9);   // 0009
String a = df.format(99);  // 0099
String b = df.format(999); // 0999
解説 (0)

上記のアプローチの多くは優れていますが、フロートだけでなく整数をフォーマットする必要がある場合があります。 これは、特に小数点の左と右の特定の数のゼロを埋める必要がある場合に使用できます。

import java.text.NumberFormat;  
public class NumberFormatMain {  

public static void main(String[] args) {  
    int intNumber = 25;  
    float floatNumber = 25.546f;  
    NumberFormat format=NumberFormat.getInstance();  
    format.setMaximumIntegerDigits(6);  
    format.setMaximumFractionDigits(6);  
    format.setMinimumFractionDigits(6);  
    format.setMinimumIntegerDigits(6);  

    System.out.println("Formatted Integer : "+format.format(intNumber).replace(",",""));  
    System.out.println("Formatted Float   : "+format.format(floatNumber).replace(",",""));  
 }    
}  
解説 (0)
int x = 1;
System.out.format("%05d",x);

フォーマットされたテキストを画面に直接印刷する場合。

解説 (2)

次のように、クラスDecimalFormatを使用します。

NumberFormat formatter = new DecimalFormat("0000"); //i use 4 Zero but you can also another number
System.out.println("OUTPUT : "+formatter.format(811)); 

OUTPUT: 0000811。

解説 (0)

次のコードでは[NumberFormat][1]を使用して、Formatterを使用する必要があります。

    int inputNo = 1;
    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumIntegerDigits(4);
    nf.setMinimumIntegerDigits(4);
    nf.setGroupingUsed(false);

    System.out.println("Formatted Integer : " + nf.format(inputNo));

出力:0001。

[1]:https://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html?bcsi_scan_64741547a7fe261b = 0& bcsi_scan_filename = NumberFormat.html。

解説 (0)

整数と文字列で機能するコードを確認します。

最初の番号が2であると仮定します。 ゼロを追加して、最終的な文字列の長さが4になるようにします。 そのためには、次のコードを使用できます。


    int number=2;
    int requiredLengthAfterPadding=4;
    String resultString=Integer.toString(number);
    int inputStringLengh=resultString.length();
    int diff=requiredLengthAfterPadding-inputStringLengh;
    if(inputStringLengh
解説 (3)
public static String zeroPad(long number, int width) {
   long wrapAt = (long)Math.pow(10, width);
   return String.valueOf(number % wrapAt + wrapAt).substring(1);
}

このアプローチの唯一の問題は、それがどのように機能するかを理解するために思考の帽子をかぶせることです。

解説 (2)

パッケージは必要ありません:

String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;

これにより、文字列が3文字になり、4〜5個のパーツを追加するのが簡単になります。 これは決して完璧な解決策ではないことを知っています(特に大きなパッド入りの ⁇ が必要な場合)が、私はそれが好きです。

解説 (1)