如何在左边填充一个零的整数?

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

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

770018 次浏览

找到这个例子…将测试…

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

像这样使用#0

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

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

完整的格式化选项记录为#0的一部分。

如果您出于任何原因使用1.5之前的Java那么可以尝试使用Apache Commons Lang方法

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

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

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);

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

如果性能在你的情况下很重要,你可以自己做,与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 functionrdm = 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.formatrdm = 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

检查适用于整数和字符串的代码。

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

您可以使用googleguava

Maven:

<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是一个非常有用的库,它还提供了许多与CollectionsCachesFunctional idiomsConcurrencyStringsPrimitivesRangesIOHashingCollections0等相关的功能

参考:Guava解释

假设您想将11打印为011

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

在此处输入图片描述

你可以像这样使用这个格式化程序:

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

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

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

无需包装:

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

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

你需要使用一个格式,下面的代码使用数字格式

    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

试试这个:

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

使用类DecimalFormat,如下所示:

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

输出: 0000811

以下是如何在不使用DecimalFormat的情况下格式化字符串。

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

09

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

019

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

0119

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

/**** @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 sizeString 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 isif (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();}}

输入

7

13

713

7013

9999

产出

0000

0007

0013

7013

9999

您可以像这样将前导0添加到您的字符串中。定义一个将成为您想要的字符串最大长度的字符串。在我的情况下,我需要一个只有9个字符长的字符串。

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

输出:000602939

静态编程语言

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()

使用这个简单的扩展函数

fun Int.padZero(): String {return if (this < 10) {"0$this"} else {this.toString()}}