java怎么将在中加入数字,在Java中将前导零添加到数字中?

本问题已经有最佳答案,请猛点这里访问。

有没有更好的方法来获得此结果? 如果num的位数比位数多,则此函数将失败,并且我认为它应该在库中的某个位置(例如Integer.toString(x,"%3d")等)

static String intToString(int num, int digits) {

StringBuffer s = new StringBuffer(digits);

int zeroes = digits - (int) (Math.log(num) / Math.log(10)) - 1;

for (int i = 0; i < zeroes; i++) {

s.append(0);

}

return s.append(num).toString();

}

您应该将接受的答案更改为@begray one。 对于绝大多数应用程序,他的性能要好得多,对于可变的零值,您可以使用String.format("%0" + digits +"d", num);

当然。 当时,我接受Elijahs是因为我的项目被锁定在Java 1.4中,但是我认为这不值得将10万其他用户误认为是对我有用的东西。

香港专业教育学院投票关闭作为重复。 虽然首先问了这个问题,但我认为重复的阅读起来较为清晰,似乎是一个规范的问题(基于投票数和观看次数)。

@Duncan,为什么将一个6岁的问题标记为重复?

@AngelKoh我在评论中解释了原因。

String.format(http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax)

在您的情况下,它将是:

String formatted = String.format("%03d", num);

0-填充零

3-将宽度设置为3

如果位数是可变的(例如,作为参数提供),则上述方法虽然优雅,但可能不适合。

Santhosh ...只需动态创建格式字符串String.format("%0" + paddingSize +"d", num)

我想@Fran除了GWT的那些

想要指出的是,此解决方案可能有问题:它会根据默认语言环境产生不同的结果,因为String.format是LOCALE-SPECIFIC。有许多不使用阿拉伯数字0-9的语言环境(奇怪的是,阿拉伯语是这些语言环境之一)。我有一个错误,当我用阿拉伯语设置手机时,我的代码在Android上崩溃了,因为我使用String.format("%04d-%02d-%02d",年,月,日)格式化日期字符串,认为会产生ISO 8601日期,但会产生类似" ????-??-??"的信息电话是阿拉伯语时。

@adevine您可以通过指定您想要的本地人来避免此错误:Local.US,对于阿拉伯用户来说,使用阿拉伯数字非常方便,只需调用String.format(Local.US, string, params)

String formatted = String.format((Locale) null,"%05d", yourLongNumber);应该也可以工作,并且对于某些语言来说更安全...

哇,那个老乡真的帮助了...

从Java 1.5开始,您可以使用String.format方法。例如,要执行与示例相同的操作:

String format = String.format("%%0%dd", digits);

String result = String.format(format, num);

return result;

在这种情况下,您要使用以数字指定的宽度创建格式字符串,然后将其直接应用于数字。此示例的格式转换如下:

%% --> %

0  --> 0

%d -->

d  --> d

因此,如果digits等于5,则格式字符串将变为%05d,它指定宽度为5且打印前导零的整数。有关转换说明符的更多信息,请参见Java文档中的String.format。

请参阅begrays答案,该答案使用正确的标志将3个字符宽的输出置零。

@Robert确实设置了正确的宽度。它与bergays的答案完全相同,只是使用同一接口以编程方式添加了填充。您是否只是看了一眼格式字符串并确定它不正确,而没有查看代码实际在做什么?

似乎不需要两次使用String.format(),只需使用字符串串联:String.format("%0" + digits +"d", num)

如果是Java 1.4及更低版本,请尝试使用新的DecimalFormat(" 00000")。format(123);。如此处所示javadevnotes.com/java-integer-to-string-with-leading-zeros

另一个选择是使用DecimalFormat格式化数字字符串。如果您被困在1.5之前的版本中,这是无需使用String.format即可完成此工作的另一种方法:

static String intToString(int num, int digits) {

assert digits > 0 :"Invalid number of digits";

// create variable length array of zeros

char[] zeros = new char[digits];

Arrays.fill(zeros, '0');

// format number as String

DecimalFormat df = new DecimalFormat(String.valueOf(zeros));

return df.format(num);

}

当num = 0时不起作用,缺少一个零

怎么样:

public static String intToString(int num, int digits) {

String output = Integer.toString(num);

while (output.length() < digits) output ="0" + output;

return output;

}

(1)那将返回0num0num0num等,而不是00000num(2)很多带有" +"的字符串连接在性能上是一个坏主意。最好预先分配一个长度为数字的StringBuffer或StringBuilder

"(1)那将返回0num0num0num等,而不是00000num"-此注释是错误的... num不在循环内。

@Nappy,您是对的,不确定为什么我当时没有看到它。

如果您的jdk版本低于1.5,则可以使用以下选项。

int iTest = 2;

StringBuffer sTest = new StringBuffer("000000"); //if the string size is 6

sTest.append(String.valueOf(iTest));

System.out.println(sTest.substring(sTest.length()-6, sTest.length()));

-1:此解决方案过于复杂且不可扩展。

这使值变得复杂且多余。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值