当前位置:  开发笔记 > 编程语言 > 正文

如何在左侧填充带零的整数?

如何解决《如何在左侧填充带零的整数?》经验,为你挑选了7个好方法。

int转换为Stringjava 时,如何使用零填充?

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



1> Yoni Roit..:

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

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

用于填充零为5的长度十六进制输出替换dx如在"%05x".

完整的格式选项记录为一部分java.util.Formatter.


额外提示:用斧头("%05x")替换d为十六进制
如果必须为大量值列表执行此操作,则DecimalFormat的性能至少比String.format()的性能高3倍.我正在自己进行一些性能调整,在Visual VM中运行两个,显示String.format()方法累计CPU时间约为DecimalFormat.format()速率的3-4倍.
要添加超过9个零,请使用类似`%012d`的内容
这适用于Java 5及更高版本.1.4和更低的DecimalFormat是另一种选择,如下所示http://javadevnotes.com/java-integer-to-string-with-leading-zeros

2> Boris Pavlov..:

如果您因任何原因使用pre 1.5 Java,那么可以尝试使用Apache Commons Lang方法

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



3> bvdb..:

假设您要打印11011

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

在此输入图像描述

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

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

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

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


@Omar Koohei确实,但它解释了"魔术常数"背后的原因.

4> Omar Kooheji..:

找到这个例子......将测试......

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更好更简洁.



5> das Keks..:

如果性能在您的情况下很重要,那么与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



6> Tho..:

您可以使用Google Guava:

Maven的:


     guava
     com.google.guava
     14.0.1

示例代码:

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,等

参考:Guava解释


与JDK String.format/MessageFormatter/DecimalFormatter相比,此方法实际上提供了更好的性能结果.

7> 小智..:

试试这个:

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

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有