1143

在java中int转换为a时如何用零填充?String

我基本上希望9999用前导零填充整数(例如 1 = 0001)。

4

18 回答 18

1860

像这样使用java.lang.String.format(String,Object...)

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

对于长度为 5 的零填充。对于十六进制输出,将 替换dx中的"%05x"

完整的格式化选项记录为java.util.Formatter.

于 2009-01-23T15:26:04.287 回答
158

假设您要打印11011

您可以使用格式化程序: "%03d"

在此处输入图像描述

您可以像这样使用此格式化程序:

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

或者,一些 java 方法直接支持这些格式化程序:

System.out.printf("%03d", a);
于 2016-02-20T11:41:25.963 回答
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

您可以使用谷歌番石榴

马文:

<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, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing,EventBus等相关的功能

参考:番石榴解释

于 2015-05-03T07:42:01.253 回答
9

以下是如何在不使用DecimalFormat.

String.format("%02d", 9)

09

String.format("%03d", 19)

019

String.format("%04d", 119)

0119

于 2020-02-19T03:48:06.960 回答
3

尽管上述许多方法都很好,但有时我们需要格式化整数和浮点数。我们可以使用它,特别是当我们需要在十进制数的左侧和右侧填充特定数量的零时。

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 回答
3
int x = 1;
System.out.format("%05d",x);

如果您想将格式化的文本直接打印到屏幕上。

于 2013-08-24T13:29:48.097 回答
1

您需要使用 Formatter,以下代码使用NumberFormat

    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

于 2017-11-08T10:30:50.560 回答
1

使用类 DecimalFormat,如下所示:

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

输出: 0000811

于 2018-10-13T11:15:13.263 回答
1

您可以像这样在字符串中添加前导 0。定义一个字符串,它将是您想要的字符串的最大长度。就我而言,我需要一个只有 9 个字符长的字符串。

String d = "602939";
d = "000000000".substring(0, (9-d.length())) + d;
System.out.println(d);

输出:000602939

于 2021-11-01T08:49:30.233 回答
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 回答
0

使用这个简单的扩展功能

fun Int.padZero(): String {
    return if (this < 10) {
        "0$this"
    } else {
        this.toString()
    }
}
于 2022-03-01T04:20:39.040 回答
-1

对于科特林

fun Calendar.getFullDate(): String {
    val mYear = "${this.get(Calendar.YEAR)}-"
    val mMonth = if (this.get(Calendar.MONTH) + 1 < 10) {
        "0${this.get(Calendar.MONTH) + 1}-"
    } else {
        "${this.get(Calendar.MONTH)+ 1}-"
    }
    val mDate = if (this.get(Calendar.DAY_OF_MONTH)  < 10) {
        "0${this.get(Calendar.DAY_OF_MONTH)}"
    } else {
        "${this.get(Calendar.DAY_OF_MONTH)}"
    }
    return mYear + mMonth + mDate
}

并将其用作

val date: String = calendar.getFullDate()

于 2022-02-24T09:35:11.963 回答
-2

这是在左侧用零填充整数的另一种方法。您可以根据自己的方便增加零的数量。添加了检查以返回与负数或大于或等于配置的零的值相同的值。您可以根据您的要求进一步修改。

/**
 * 
 * @author Dinesh.Lomte
 *
 */
public class AddLeadingZerosToNum {
    
    /**
     * 
     * @param args
     */
    public static void main(String[] args) {
        
        System.out.println(getLeadingZerosToNum(0));
        System.out.println(getLeadingZerosToNum(7));
        System.out.println(getLeadingZerosToNum(13));
        System.out.println(getLeadingZerosToNum(713));
        System.out.println(getLeadingZerosToNum(7013));
        System.out.println(getLeadingZerosToNum(9999));
    }
    /**
     * 
     * @param num
     * @return
     */
    private static String getLeadingZerosToNum(int num) {
        // Initializing the string of zeros with required size
        String zeros = new String("0000");
        // Validating if num value is less then zero or if the length of number 
        // is greater then zeros configured to return the num value as is
        if (num < 0 || String.valueOf(num).length() >= zeros.length()) {
            return String.valueOf(num);
        }
        // Returning zeros in case if value is zero.
        if (num == 0) {
            return zeros;
        }
        return new StringBuilder(zeros.substring(0, zeros.length() - 
                String.valueOf(num).length())).append(
                        String.valueOf(num)).toString();
    }
}

输入

0

7

13

713

7013

9999

输出

0000

0007

0013

7013

9999

于 2020-08-15T14:34:23.300 回答
-4

无需包:

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

这会将字符串填充为三个字符,并且很容易为四五个字符添加更多部分。我知道这无论如何都不是完美的解决方案(特别是如果你想要一个大的填充字符串),但我喜欢它。

于 2017-05-09T12:27:44.753 回答