在java中int
转换为a时如何用零填充?String
我基本上希望9999
用前导零填充整数(例如 1 = 0001
)。
像这样使用java.lang.String.format(String,Object...)
:
String.format("%05d", yournumber);
对于长度为 5 的零填充。对于十六进制输出,将 替换d
为x
中的"%05x"
。
完整的格式化选项记录为java.util.Formatter
.
如果您出于任何原因使用 1.5 之前的 Java,则可以尝试使用 Apache Commons Lang 方法
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 更好,更简洁。
试试这个:
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
如果在您的情况下性能很重要,那么与函数相比,您可以用更少的开销自己做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
字符串格式: 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
等相关的功能
参考:番石榴解释
以下是如何在不使用DecimalFormat
.
String.format("%02d", 9)
09
String.format("%03d", 19)
019
String.format("%04d", 119)
0119
尽管上述许多方法都很好,但有时我们需要格式化整数和浮点数。我们可以使用它,特别是当我们需要在十进制数的左侧和右侧填充特定数量的零时。
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);
如果您想将格式化的文本直接打印到屏幕上。
您需要使用 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
使用类 DecimalFormat,如下所示:
NumberFormat formatter = new DecimalFormat("0000"); //i use 4 Zero but you can also another number
System.out.println("OUTPUT : "+formatter.format(811));
输出: 0000811
您可以像这样在字符串中添加前导 0。定义一个字符串,它将是您想要的字符串的最大长度。就我而言,我需要一个只有 9 个字符长的字符串。
String d = "602939";
d = "000000000".substring(0, (9-d.length())) + d;
System.out.println(d);
输出:000602939
检查适用于整数和字符串的代码。
假设我们的第一个数字是 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);
使用这个简单的扩展功能
fun Int.padZero(): String {
return if (this < 10) {
"0$this"
} else {
this.toString()
}
}
对于科特林
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()
这是在左侧用零填充整数的另一种方法。您可以根据自己的方便增加零的数量。添加了检查以返回与负数或大于或等于配置的零的值相同的值。您可以根据您的要求进一步修改。
/**
*
* @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 size
String 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 is
if (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();
}
}
输入
0
7
13
713
7013
9999
输出
0000
0007
0013
7013
9999
无需包:
String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;
这会将字符串填充为三个字符,并且很容易为四五个字符添加更多部分。我知道这无论如何都不是完美的解决方案(特别是如果你想要一个大的填充字符串),但我喜欢它。