我怎么能用左边的零填充整数?
在转换为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
是非常有用的库,它还提供了与Collections
, Caches
, Functional idioms
, Concurrency
, Strings
,基Primitives
, Ranges
, IO
, Hashing
, EventBus
等有关的许多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),但我喜欢它。