java - String.format 向长/字符串添加点

标签 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,所以我不太确定是否可以使用某种子字符串作为格式。如果可能的话,我无法弄清楚..

最佳答案

比使用 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();

关于java - String.format 向长/字符串添加点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46684368/

相关文章:

java - 将 NekoHTML ElementNSImpl 对象序列化回 HTML/XML

java - 如何使用 ArgumentMatchers 告诉 Mockito 任何队列?

java - 如何在不切割单词的情况下缩写中间的字符串

C#导出为Excel格式

java - 在 MVC 模式中将模型和操作划分为类的最佳方法是什么

java - 如果方法名称与类不同,为什么此 Java 代码不起作用?

string - Julia 中是否有将 UUID 类型转换为 String 类型的方法

c - C 中的 scanf string 和 printf 不能按预期工作

php - PHP中的自动图像格式检测

python - str.format 和 string.Formatter.format 之间的区别