如何格式化前导为零的Java字符串?
以下是字符串,例如:如何格式化前导为零的Java字符串?,java,string,formatting,format,Java,String,Formatting,Format,以下是字符串,例如: "Apple" 我想加上0来填充8个字符: "000Apple" 我怎样才能做到 StringUtils.leftPad(yourString, 8, '0'); 这是我的 使用(或查看代码以创建自己的函数)。虽然不漂亮,但它可以工作。如果您可以访问apache commons,我建议您使用它 if (val.length() < 8) { for (int i = 0; i < val - 8; i++) { val = "0" + val
"Apple"
我想加上0来填充8个字符:
"000Apple"
我怎样才能做到
StringUtils.leftPad(yourString, 8, '0');
这是我的 使用(或查看代码以创建自己的函数)。虽然不漂亮,但它可以工作。如果您可以访问apache commons,我建议您使用它
if (val.length() < 8) {
for (int i = 0; i < val - 8; i++) {
val = "0" + val;
}
}
if(val.length()<8){
对于(int i=0;i
如果您必须在没有库的帮助下执行此操作:
("00000000" + "Apple").substring("Apple".length())
(只要字符串长度不超过8个字符,就可以正常工作。)您可能需要处理edgecase。这是一种通用方法
public class Test {
public static void main(String[] args){
System.out.println(padCharacter("0",8,"hello"));
}
public static String padCharacter(String c, int num, String str){
for(int i=0;i<=num-str.length()+1;i++){str = c+str;}
return str;
}
}
公共类测试{
公共静态void main(字符串[]args){
System.out.println(padCharacter(“0”,8,“hello”);
}
公共静态字符串padCharacter(字符串c、int num、字符串str){
对于(int i=0;iString input=“Apple”;
StringBuffer buf=新的StringBuffer(输入);
while(buf.length()<8){
buf.插入(0,'0');
}
字符串输出=buf.toString();
公共静态void main(字符串[]args)
{
字符串stringForTest=“Apple”;
填充后的整数所需长度=8;
int inputStringLengh=stringForTest.length();
int diff=填充后所需的长度-inputStringLengh;
if(inputStringLengh
您可以使用另一个答案中使用的String.format方法生成0的字符串
String.format("%0"+length+"d",0)
可以通过动态调整格式字符串中前导0的数量来解决问题:
public String leadingZeros(String s, int length) {
if (s.length() >= length) return s;
else return String.format("%0" + (length-s.length()) + "d%s", 0, s);
}
这仍然是一个混乱的解决方案,但它的优点是可以使用整型参数指定结果字符串的总长度。这很快&适用于任何长度
public static String prefixZeros(String value, int len) {
char[] t = new char[len];
int l = value.length();
int k = len-l;
for(int i=0;i<k;i++) { t[i]='0'; }
value.getChars(0, l, t, k);
return new String(t);
}
公共静态字符串前缀零(字符串值,int len){
char[]t=新字符[len];
int l=value.length();
int k=len-l;
对于(int i=0;i这是他真正想要的,我相信:
String.format("%0"+ (8 - "Apple".length() )+"d%s",0 ,"Apple");
输出:
000Apple
当字符串中的大多数字符都有8个字符时,速度会更快
int length = in.length();
return length == 8 ? in : ("00000000" + in).substring(length);
在我的情况下,在我的机器上要快1/8。您可以使用:
org.apache.commons.lang.StringUtils.leftPad("Apple", 8, "0")
使用Guava的实用程序类:
Strings.padStart("Apple", 8, '0');
我也遇到过类似的情况,我使用了这个;它非常简洁,您不必处理长度或其他库
String str = String.format("%8s","Apple");
str = str.replace(' ','0');
简单而整洁。字符串格式返回“Apple”
,因此在用零替换空格后,它会给出所需的结果。以下是我用于预填充字符串的简单API较少的“可读脚本”(简单、可读且可调)
while(str.length()
在Java中:
String zeroes="00000000";
String apple="apple";
String result=zeroes.substring(apple.length(),zeroes.length())+apple;
在Scala中:
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}
您还可以在Java 8中探索一种使用streams和reduce的方法(类似于我使用Scala的方法)。它与所有其他解决方案都有点不同,我特别喜欢它。有人尝试过这种纯Java解决方案(没有SpringUtils):
不幸的是,只有当字符串中没有空格时,此解决方案才有效。如果您想用纯Java编写程序,可以遵循以下方法,或者有许多字符串实用程序可以帮助您更好地使用更高级的功能
使用一个简单的静态方法,您可以实现如下所示
public static String addLeadingText(int length, String pad, String value) {
String text = value;
for (int x = 0; x < length - value.length(); x++) text = pad + text;
return text;
}
输出将是带有方法String::repeat(Java 11)的解决方案
如果需要将8更改为另一个数字或将其参数化,您可以使用:
String.format("%08d", "Apple");
这似乎是最简单的方法,不需要任何外部库。但我想在字符串之前添加前导零,而不是int。您可以在Java 1.4及以下版本中使用StringUtils或DecimalFormat。在这里检查@Variag use%07s
而不是%07d
,您将得到FormatFlagsConversionIsmatch异常
。你可以试试。为什么不使用commons lang呢?它有很多有用的额外功能。即使你不能使用commons lang,你也可以轻松地从StringUtils复制源代码来创建自己的函数。这将是一个比所选答案更好的通用解决方案。如果这是库用于的唯一方法呢?根据也许添加的库比它所使用的应用程序还要大很多倍。我可以想象不在应用程序中添加公共库的原因。别误会:我同意,它包含非常有用的东西,但我理解,如果好处不是只需要编写一个(或几个)外部jar,就不愿意将应用程序塞满外部jar回答“为什么不使用commons lang?它有很多有用的额外功能。”用一个具体的例子提问。小米在其Android设备上提供了一个过时的commons lang版本。在你的应用程序中包含一个更新的版本会导致类加载器冲突,因此commons lang不能再用于任何Android项目。@Nachi,即使存在过时的StringUtils.leftPad,-1可能是因为这不是一个很好的示例le:您使用的是“幻数”并连接字符串,这应该用StringBuilder或StringBuffer来代替。这不是一个好的答案,因为val-8
对于Java来说不是正确的逻辑,并且会导致编译错误,这非常聪明——但我花了大约30秒的时间才“理解”。我认为一个更可读的解决方案会更好。这是一个非常好的解决方案,当你在没有太多空间的东西上嵌入软件时,额外的库是不可选择的。谢谢!!这个版本速度太快了!我喜欢它。@Mathu老实说,这并不难理解。两个字符串是连接在一起的并从中提取前5个字符。没有魔力。在这种情况下(对于固定字符串Apple)不太合理,但很容易理解。(“0000”+字符串)。子字符串(字符串.length())
更真实。这将字符串
填充前导零。Sorr
while(str.length() < desired_length)
str = '0'+str;
public static String lpad(String str, int requiredLength, char padChar) {
if (str.length() > requiredLength) {
return str;
} else {
return new String(new char[requiredLength - str.length()]).replace('\0', padChar) + str;
}
}
String zeroes="00000000";
String apple="apple";
String result=zeroes.substring(apple.length(),zeroes.length())+apple;
"Apple".foldLeft("00000000"){(ac,e)=>ac.tail+e}
//decimal to hex string 1=> 01, 10=>0A,..
String.format("%1$2s", Integer.toString(1,16) ).replace(" ","0");
//reply to original question, string with leading zeros.
//first generates a 10 char long string with leading spaces, and then spaces are
//replaced by a zero string.
String.format("%1$10s", "mystring" ).replace(" ","0");
public static String addLeadingText(int length, String pad, String value) {
String text = value;
for (int x = 0; x < length - value.length(); x++) text = pad + text;
return text;
}
addLeadingText(8, "0", "Apple");
String str = "Apple";
String formatted = "0".repeat(8 - str.length()) + str;
String.format("%08d", "Apple");