【发布时间】:2017-10-11 09:15:39
【问题描述】:
我有以下 Long:201700112345,我想将其转换为 2017.001.12345。
我知道我可以只使用一个子字符串:
long l = 201700112345L;
String s = Long.toString(l);
String result = s.substring(0,4)+"."+s.substring(4,7)+"."+s.substring(7);
但是我也可以使用String.format EDIT: ..为String.format 方法的 Object-varargs 参数输入单个输入来完成此操作吗?
我尝试过的一些事情:
String.format("%4d.%3d.%5d", l);
// Which resulted in:
java.util.MissingFormatArgumentException: Format specifier '%3d'
我意识到这一点很明显,因为我只有一个输入而不是三个..
我知道我可以使用%1$ 回溯到相同的输入,所以我尝试了:
String.format("%4d.%1$3d.%1$5d", l);
// Which resulted in:
201700112345.201700112345.201700112345
我也试过这个,它给出了正确的长度,但不是正确的部分:
String.format("%.4s.%1$.3s.%1$.5s", Long.toString(l));
// Which resulted in:
2017.201.20170
我必须承认我没有经常使用String.format,所以我不太确定是否可以使用某种子字符串作为格式。如果可能的话,我想不通..
【问题讨论】:
-
“我也可以用 String.format 来完成吗”:
String.format("%s.%s.%s", s.substring(0, 4), s.substring(4, 7), s.substring(7)). -
也许像this SO question 这样的东西可以帮助你(只需使用点而不是破折号..)
-
@AndyTurner 呵呵,是的,我知道有可能。 ;) 编辑了我的问题。
-
@Nino 嗯,没想到用
.replaceAll。我猜这也是另一种选择:Long.toString(l).replaceAll((.{4})(.{3})(.{5})", "$1.$2.$3"));。嗯,我猜只会使用substring。我只是想知道这是否可以用String.format来完成,或者String.format在其武器库中是否没有任何子字符串。
标签: java string format substring string-formatting