【问题标题】:java string format methodjava字符串格式化方法
【发布时间】:2013-08-20 11:51:43
【问题描述】:

我想要做的是获取数字的前 2 位数字。如果 number 的位数不超过 1,那么它将添加前导零。

s 变量等于“122”,但我想获得前 2 位数字,即“12”。我认为我的格式有问题。

例如,如果 totalNumberOfCars 等于 6,则 s 变量将等于“06”。

int totalNumberOfCars = 122;
String s = String.format("%02d", (totalNumberOfCars + 1))

编辑:有谁知道 String.format("%02d", totalNumberOfCars) 是做什么的?

【问题讨论】:

  • 你为什么要写这个:(totalNumberOfCars + 1)?
  • @codeMan 我编辑了。其实这并不重要。

标签: java string-formatting


【解决方案1】:

恐怕String.format() 做不到,见http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax

但是您的格式字符串将是子字符串的一个很好的起点,因为任何 if 都是不必要的:

int totalNumberOfCars = 122;
String s = String.format("%02d", (totalNumberOfCars + 1));
s = s.substring(0,2);

顺便说一下上面 javadoc 链接的简明解释:

与参数不对应的格式说明符具有以下语法:

  %[flags][width]conversion

[...] 在同一页面的下方:

标志 '0' [...] [表示] 零填充

[...] 在同一页面的下方:

宽度

宽度是要写入输出的最小字符数。对于行分隔符转换,宽度不适用;如果提供,将抛出异常。

示例输出为:

1  --> 01
-1 --> -1
10 --> 10
122--> 122

【讨论】:

    【解决方案2】:

    也许不是很优雅,但应该可以:

    String s = ((totalNumberOfCars<10?"0":"")+totalNumberOfCars).substring(0,2);
    

    【讨论】:

      【解决方案3】:

      字符串 s = substring_safe(s, 0, 2);

      static String substring_safe (String s, int start, int len) { ... } 这将事先检查长度并采取相应措施(返回较小的字符串或用空格填充)。

      【讨论】:

        猜你喜欢
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        相关资源
        最近更新 更多