在Java中int
转换为a时,如何在左边用零填充pad String
?
我基本上希望将整数填充到9999
前导零(例如1 = 0001
)。
new String(Integer.toString(num + 10000)).substring(1)
如果num
大于9999,则该方法存在问题。
在Java中int
转换为a时,如何在左边用零填充pad String
?
我基本上希望将整数填充到9999
前导零(例如1 = 0001
)。
new String(Integer.toString(num + 10000)).substring(1)
如果num
大于9999,则该方法存在问题。
Answers:
java.lang.String.format(String,Object...)
像这样使用:
String.format("%05d", yournumber);
用于长度为5的零填充。对于十六进制输出,d
用中的x
as 替换"%05x"
。
完整格式选项作为的一部分进行了说明java.util.Formatter
。
String.format
类似于C中的printf()吗?
%012d
%d can't format java.lang.String arguments
假设您要打印11
为011
你可以使用一个格式化:"%03d"
。
您可以这样使用此格式化程序:
int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);
另外,一些java方法直接支持以下格式器:
System.out.printf("%03d", a);
F
format()的应该是f
: String.format(...);
。
int prefixLength = requiredTotalLength - String.valueOf(numericValue).length
),然后使用重复字符串方法创建所需的前缀。有多种重复字符串的方法,但是没有本机的Java语言afaik:stackoverflow.com/questions/1235179/…–
如果出于任何原因使用Java 1.5之前的版本,则可以尝试使用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更好,更简洁。
如果性能在您的情况下很重要,则与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
for( int i : data ) strData += (i > 9 ? (i > 99 ? "" : "0") : "00") + Integer.toString( i ) + "|";
效果非常快(很抱歉,我没有计时!)。
您可以使用Google Guava:
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
,等
试试这个:
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(",",""));
}
}
检查我的适用于整数和字符串的代码。
假设我们的第一个数字为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);
(new char[diff])
为什么
replace("\0", "0")
什么...什么
您需要使用格式化程序,以下代码使用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);
}
这种方法的唯一问题是,它会让您戴上思考的帽子来弄清楚它是如何工作的。
number
或具有width
大于18