我怎么能用左边的零填充整数?

在转换为string时,如何在java中留下一个int用零填充?

我基本上正在寻找填充高达9999与前导零(例如1 =“0001”)的整数。

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

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

用于长度为5的零填充。对于hex输出,用"%05x"x代替d

完整的格式化选项被logging为java.util.Formatter一部分。

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

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

假设你想打印11作为011

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

在这里输入图像描述

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

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

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

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

find这个例子…将testing…

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

testing这个和:

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

这两个工作,为我的目的,我认为String.Format更好,更简洁。

如果性能在你的情况下很重要,那么你可以用比String.format函数更less的开销来实现:

 /** * @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"); } 

结果

拥有function: 1697ms

String.format: 38134ms

你可以使用谷歌番石榴 :

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 idiomsConcurrencyStrings ,基PrimitivesRangesIOHashingEventBus等有关的许多function

参考: GuavaExplained

 int x = 1; System.out.format("%05d",x); 

如果你想直接在屏幕上打印格式化文本。

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

 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(",","")); } } 

检查我的代码将适用于整数和string。

假设我们的第一个数字是2.而且我们要添加零,所以最终string的长度将是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); 

您需要使用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

 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填充到三个字符,并且很容易为四个或五个添加一个部分。 我知道这不是什么完美的解决scheme(特别是如果你想要一个大的填充string),但我喜欢它。