左填充字符串与零

我看过类似的问题在这里在这里

但我不知道如何左垫字符串与零。

< p >输入:“129018” 输出:“0000129018”< / p >

总输出长度应为10。

505676 次浏览
String str = "129018";
StringBuilder sb = new StringBuilder();


for (int toPrepend=10-str.length(); toPrepend>0; toPrepend--) {
sb.append('0');
}


sb.append(str);
String result = sb.toString();

如果你的字符串只包含数字,你可以让它成为一个整数,然后做填充:

String.format("%010d", Integer.parseInt(mystring));

如果不是我想知道该怎么做

String paddedString = org.apache.commons.lang.StringUtils.leftPad("129018", 10, "0")

第二个参数是期望的输出长度

"0"是填充字符

String str = "129018";
String str2 = String.format("%10s", str).replace(' ', '0');
System.out.println(str2);

老问题了,但我也有两个方法。


对于固定(预定义的)长度:

    public static String fill(String text) {
if (text.length() >= 10)
return text;
else
return "0000000000".substring(text.length()) + text;
}

对于可变长度:

    public static String fill(String text, int size) {
StringBuilder builder = new StringBuilder(text);
while (builder.length() < size) {
builder.append('0');
}
return builder.toString();
}

这将填充左侧任何字符串的总宽度为10,而不用担心解析错误:

String unpadded = "12345";
String padded = "##########".substring(unpadded.length()) + unpadded;


//unpadded is "12345"
//padded   is "#####12345"

如果你想要右填充:

String unpadded = "12345";
String padded = unpadded + "##########".substring(unpadded.length());


//unpadded is "12345"
//padded   is "12345#####"

你可以用任何你想要填充的字符替换“#”字符,重复你想要的字符串的总宽度的次数。例如,如果你想在左边加0,使整个字符串长度为15个字符:

String unpadded = "12345";
String padded = "000000000000000".substring(unpadded.length()) + unpadded;


//unpadded is "12345"
//padded   is "000000000012345"

与khachik的答案相比,这个答案的好处是它没有使用Integer。parseInt,它可以抛出异常(例如,如果您想要填充的数字太大,如12147483647)。缺点是,如果填充的对象已经是int类型,那么必须将其转换为String类型,然后再转换回来,这是不可取的。

所以,如果你确定它是整数,khachik的答案就很好。如果不是,那么这是一个可能的策略。

    int number = -1;
int holdingDigits = 7;
System.out.println(String.format("%0"+ holdingDigits +"d", number));

刚刚在采访中问过这个问题........

我的答案如下,但这个(上面提到的)要好得多——>

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

我的回答是:

static String leadingZeros(int num, int digitSize) {
//test for capacity being too small.


if (digitSize < String.valueOf(num).length()) {
return "Error : you number  " + num + " is higher than the decimal system specified capacity of " + digitSize + " zeros.";


//test for capacity will exactly hold the number.
} else if (digitSize == String.valueOf(num).length()) {
return String.valueOf(num);


//else do something here to calculate if the digitSize will over flow the StringBuilder buffer java.lang.OutOfMemoryError


//else calculate and return string
} else {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < digitSize; i++) {
sb.append("0");
}
sb.append(String.valueOf(num));
return sb.substring(sb.length() - digitSize, sb.length());
}
}

这是另一种方法:

int pad = 4;
char[] temp = (new String(new char[pad]) + "129018").toCharArray()
Arrays.fill(temp, 0, pad, '0');
System.out.println(temp)

格式化字符串使用

import org.apache.commons.lang.StringUtils;


public class test {


public static void main(String[] args) {


String result = StringUtils.leftPad("wrwer", 10, "0");
System.out.println("The String : " + result);


}
}

输出:字符串:00000wrwer

其中第一个参数是要格式化的字符串,第二个参数是所需输出长度的长度,第三个参数是字符串要填充的字符。

使用链接下载jar http://commons.apache.org/proper/commons-lang/download_lang.cgi

检查我的代码,将工作的整数和字符串。

假设第一个数字是129018。我们要给它加上0所以最终字符串的长度是10。为此,您可以使用以下代码

    int number=129018;
int requiredLengthAfterPadding=10;
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);

右填充固定长度-10: 字符串。格式(“% 1 $ -10年代”,“abc”) 左填充固定长度-10: 字符串。格式(“% 1 $ 10 s”、“abc”)< / p >

使用谷歌番石榴:

Maven:

<dependency>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
<version>14.0.1</version>
</dependency>

示例代码:

Strings.padStart("129018", 10, '0') returns "0000129018"

下面是一个基于String的解决方案。适用于字符串的格式,适用于可变长度。

public static String PadLeft(String stringToPad, int padToLength){
String retValue = null;
if(stringToPad.length() < padToLength) {
retValue = String.format("%0" + String.valueOf(padToLength - stringToPad.length()) + "d%s",0,stringToPad);
}
else{
retValue = stringToPad;
}
return retValue;
}


public static void main(String[] args) {
System.out.println("'" + PadLeft("test", 10) + "'");
System.out.println("'" + PadLeft("test", 3) + "'");
System.out.println("'" + PadLeft("test", 4) + "'");
System.out.println("'" + PadLeft("test", 5) + "'");
}

< >强输出: “000000测试” “测试” “测试” “0测试”< / p >

如果你需要性能并且知道字符串的最大大小,使用以下方法:

String zeroPad = "0000000000000000";
String str0 = zeroPad.substring(str.length()) + str;

注意最大字符串大小。如果它大于StringBuffer的大小,你将得到一个java.lang.StringIndexOutOfBoundsException

Satish的解决方案在预期的答案中是非常好的。我想通过添加变量n到格式化字符串而不是10个字符来使它更通用。

int maxDigits = 10;
String str = "129018";
String formatString = "%"+n+"s";
String str2 = String.format(formatString, str).replace(' ', '0');
System.out.println(str2);

这在大多数情况下都有效

基于@Haroldo Macêdo的答案,我在自定义Utils类中创建了一个方法,例如

/**
* Left padding a string with the given character
*
* @param str     The string to be padded
* @param length  The total fix length of the string
* @param padChar The pad character
* @return The padded string
*/
public static String padLeft(String str, int length, String padChar) {
String pad = "";
for (int i = 0; i < length; i++) {
pad += padChar;
}
return pad.substring(str.length()) + str;
}

然后调用Utils.padLeft(str, 10, "0");

我用过这个:

DecimalFormat numFormat = new DecimalFormat("00000");
System.out.println("Code format: "+numFormat.format(123));

结果:00123

我希望它对你有用!

以下是我的解决方案:

String s = Integer.toBinaryString(5); //Convert decimal to binary
int p = 8; //preferred length
for(int g=0,j=s.length();g<p-j;g++, s= "0" + s);
System.out.println(s);

输出:00000101

我更喜欢这样的代码:

public final class StrMgr {


public static String rightPad(String input, int length, String fill){
String pad = input.trim() + String.format("%"+length+"s", "").replace(" ", fill);
return pad.substring(0, length);
}


public static String leftPad(String input, int length, String fill){
String pad = String.format("%"+length+"s", "").replace(" ", fill) + input.trim();
return pad.substring(pad.length() - length, pad.length());
}
}

然后:

System.out.println(StrMgr.leftPad("hello", 20, "x"));
System.out.println(StrMgr.rightPad("hello", 20, "x"));