1143

Javaintでaに変換するときに、どのようにゼロをパディングしたままにしますか?String

私は基本的に、整数9999を先行ゼロで埋めようとしています(例: 1 = 0001)。

4

18 に答える 18

1860

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

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

長さ 5 のゼロ パディングの場合。16 進出力の場合d、 をxas in に置き換え"%05x"ます。

完全なフォーマット オプションは、 の一部として文書化されていますjava.util.Formatter

于 2009-01-23T15:26:04.287 に答える
123

何らかの理由で 1.5 より前の Java を使用している場合は、Apache Commons Lang メソッドを試すことができます

org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')
于 2009-01-23T15:32:14.447 に答える
33

この例を見つけました...テストします...

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 の方が優れていて簡潔だと思います。

于 2009-01-23T15:25:43.850 に答える
24

これを試してください:

import java.text.DecimalFormat; 

DecimalFormat df = new DecimalFormat("0000");

String c = df.format(9);   // Output: 0009

String a = df.format(99);  // Output: 0099

String b = df.format(999); // Output: 0999
于 2018-06-25T14:26:15.383 に答える
22

あなたのケースでパフォーマンスが重要な場合は、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

文字列形式: 38134ms

于 2013-09-03T15:05:12.123 に答える
18

Google Guavaを使用できます:

メイヴン:

<dependency>
     <artifactId>guava</artifactId>
     <groupId>com.google.guava</groupId>
     <version>14.0.1</version>
</dependency>

サンプルコード:

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

ノート:

Guavaは非常に便利なライブラリであり、 、、、、、、Collections、、などに関連する多くの機能も提供します。CachesFunctional idiomsConcurrencyStringsPrimitivesRangesIOHashingEventBus

参照: GuavaExplained

于 2015-05-03T07:42:01.253 に答える
3
int x = 1;
System.out.format("%05d",x);

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

于 2013-08-24T13:29:48.097 に答える
3

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

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(",",""));  
 }    
}  
于 2012-03-02T19:13:07.620 に答える
0

整数と文字列で機能するコードを確認してください。

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

    int number=2;
    int requiredLengthAfterPadding=4;
    String resultString=Integer.toString(number);
    int inputStringLengh=resultString.length();
    int diff=requiredLengthAfterPadding-inputStringLengh;
    if(inputStringLengh<requiredLengthAfterPadding)
    {
        resultString=new String(new char[diff]).replace("\0", "0")+number;
    }        
    System.out.println(resultString);
于 2014-07-24T10:29:17.313 に答える