java如何在整数左填充0

原文 标签 IT工具网 java

问题

如何在整数左填充0 举例 1 = “0001”

答案一,String.format

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

用0填充,总长度为5 https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html

答案二,ApacheCommonsLanguage

如果需要在Java 1.5前使用,可以利用 Apache Commons Language 方法

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

答案三,DecimalFormat

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 函数的可以自己实现

/**
 * @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

答案,Google Guava

Maven:

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

样例:

Strings.padStart("7", 3, '0') returns "007"
Strings.padStart("2020", 3, '0') returns "2020"

注意: Guava 是非常有用的库,它提供了很多有用的功能,包括了Collections, Caches, Functional idioms, Concurrency, Strings, Primitives, Ranges, IO, Hashing, EventBus等

stackoverflow原址: http://stackoverflow.com/questions/473282/how-can-i-pad-an-integers-with-zeros-on-the-left

相关文章:

java的反射是什么及其用途

java finally代码块总会被执行么

该什么时候使用ThreadLocal变量,它是如何工作的

java - 在Eventbus中重用事件对象

如何遍历一个JavaScript数组

Nginx反向代理自建CDN加速节点实现DNS智能解析

java - mahout是实时工作还是根据算法规则对数据进行预处理?

java - 如何在jlabel中同时显示来自网络的文本和图像

java - 我的正则表达式匹配,但是在使用Java时却不匹配

java - 如何使用while循环从结果集中获得的值更新另一个操作?