题
你怎么离开衬垫的一个 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')
找到这个例子...将测试...
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),但我喜欢它。