【发布时间】:2021-01-12 19:25:24
【问题描述】:
我有一些代码假设输入不会超过 6 位。它采用该值,用前导 0 填充它,然后在其前面加上“999”,如下所示:
String.format("999%06d", 123); // => "999000123"
预期的输入现在溢出了 6 位最大值,变成了 7 位。这会产生 10 个字符的格式化输出(例如 String.format("999%06d", 1000000); // => "9991000000"),这对我们来说很糟糕。
问题:是否可以指定此字符串格式以使其保持与上述相同的逻辑,但不是始终以前导“999”为前缀,而是在输入为7时仅以两个前导“9”为前缀数字长(如果输入的长度为
为了帮助说明,这些是当值从 6 位增加到 7 位时我们想要的输入/输出:
(Input) => (Formatted Output)
1 => "999000001"
999999 => "999999999"
1000000 => "991000000"
(我知道还有其他方法可以做到这一点,这些方法很有帮助,但我们的情况不典型,所以我想问一下这是否可以在单个 String.format 电话中完成)
【问题讨论】:
-
不,这是不可能的。您作为第一个参数提供的格式字符串是文字(静态)字符串值,它不能包含控制流,因此,它将始终以相同的方式格式化您的输出。您可能想要编写一些逻辑(例如 if-else)并定义两个不同的(或更多,如果您愿意的话)场景。
-
格式化后100.000如何变成1.000.000?它会变成 0100000
-
看来
String.format是不可能的,但是你可以使用s = s.substring(s.length() - 9)作为格式的结果
标签: java string formatting