【问题标题】:Understanding the $ in Java's format strings理解 Java 格式字符串中的 $
【发布时间】:2009-12-16 14:42:44
【问题描述】:
 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"

在这种情况下,为什么要在 $ 后面加上 2?

【问题讨论】:

    标签: java formatter


    【解决方案1】:

    2$无关:

    • %     =   格式字符串的开始
    • 4$ = 第四个参数('d')
    • 2    = 两个宽度(右对齐)
    • s    = 字符串类型

    【讨论】:

    • 非常清晰的解释谢谢。但是,当我使用 %4$2s 并且我的参数值为 'ABCDEFGH' 时,它不会仅检索 2 个字符。它检索了完整的字符串。为什么?
    • 2 = 两个宽度(右对齐)
    【解决方案2】:

    2$ 表示将列表中的第二个参数放在这里。 $ 跟在后面的是一个不在它前面的数字。同样,4$ 表示将第四个参数放在这里。

    为了澄清,我们可以将%2$2s 格式分解成几个部分:

    • % - 表示这是一个格式字符串

    • 2$ - 显示第二个值参数应该放在这里

    • 2 - 格式为两个字符

    • s - 将值格式化为字符串

    您可以找到更多信息in the documentation

    【讨论】:

    • 当它是一个错误的答案时,它实际上被否决了。因为现在是正确的,所以删除了反对票。
    • @Sven - 答案从未改变,我想你一定读错了。我已添加但未更改任何内容。
    • 好吧,当我投反对票时,读到:“2$ 表示将列表中的第二个参数放在这里。”这不是我认为的正确答案。
    • 它现在仍然准确地说,你说它现在是正确的。
    • 就其本身而言,这是错误的,或者至少没有回答问题,但结合上下文,它是正确的。
    【解决方案3】:

    这些是位置参数,%4$2s 表示将 第四 参数格式化为宽度为 2 的字符串。这在为需要在不触及源的情况下重新排序参数的本地化字符串提供时特别有用代码。

    用于表示日期和时间的类型的格式说明符具有以下语法:

    %[argument_index$][flags][width]conversion
    

    可选的argument_index 是一个十进制整数,表示参数在参数列表中的位置。第一个参数由"1$" 引用,第二个由"2$" 引用,依此类推——Formatter documentation

    【讨论】:

    • 不过,我更喜欢 .NET 的格式字符串,因为它们使参数的位置更加清晰。
    【解决方案4】:

    %: 格式字符串

    4$:第四个值参数

    2: 宽度(打印参数时的长度)

    s: 是字符串参数转换

    例如下面的sn-p:

    StringBuffer sb=new StringBuffer();
    
    Formatter formatter=new Formatter(sb,Locale.UK);
    
    formatter.format("-%4$5s-%3$5s-%2$5s-%1$5s-", "a", "b", "c", "d");
    
    System.out.println(sb);
    

    产生一个输出:

    -    d-    c-    b-    a-
    

    (每个参数的宽度为 5 个字符,用空格填充)

    并将5 替换为2,将产生以下输出:

    - d- c- b- a-
    

    看到区别了吗? :)

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2018-05-13
      • 2017-06-09
      • 1970-01-01
      • 2020-07-27
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多