String.format将点添加到Long / String

时间:2017-10-11 09:15:39

标签: java string format substring string-formatting

我有以下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编辑来完成此操作:.. 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,所以我不太确定是否有可能将某种子字符串作为格式。如果可能的话,我无法理解......

1 个答案:

答案 0 :(得分:1)

比使用substring更有效的方法是使用StringBuilder:这有append(CharSequence,int,int)方法,可以避免不必要地创建子字符串:

String formatted =
    new StringBuilder(s.length() + 2)
        .append(s, 0, 4)
        .append('.')
        .append(s, 4, 7)
        .append('.')
        .append(s, 7, s.length())
        .toString();