你怎么离开衬垫的一个 int 零时转换到 String 在java?

我基本上在寻找垫出整数达 9999 与领先的零(例如1= 0001).

有帮助吗?

解决方案

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

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

零填补一个长度为5。为进制输出的替换 d 有一个 x 如同在 "%05x".

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

其他提示

如果由于任何原因用先1.5Java然后可以尝试使用Apache识共享方法郎

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

让我们说你要打印 11 作为 011

你可以使用的格式: "%03d".

enter image description here

你可以使用这个格式是这样的:

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

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

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

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

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 功能:

/**
 * @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.格式: 38134ms

你可以使用 谷歌的番石榴:

玛文:

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

Ref: GuavaExplained

试试这个:

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

虽然许多上述办法是好的,但有时我们需要格式整数以及浮动。我们可以利用这一点,特别是当我们需要垫特定数量的零左以及正确的位小数的数字。

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

如果你想打印格式的文本直到屏幕上。

使用类DecimalFormat,像这样:

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

输出: 0000811

检查我的代码,将工作对于整数和串。

假设我们的第一个数为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);

你需要使用的格式,下列代码使用 数字格式

    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

public static String zeroPad(long number, int width) {
   long wrapAt = (long)Math.pow(10, width);
   return String.valueOf(number % wrapAt + wrapAt).substring(1);
}

唯一的问题与这种方法是,它使你把你的思维帽子找出它是如何工作的。

没有包装的需要:

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

这将垫串三个字符,并且很容易添加一个部分更为四个或五个。我知道这不是完美的解决方案以任何方式(尤其是如果你想要一个大的填充string),但我喜欢它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top