Android动态字符串:%1d与%1 $ d

时间:2019-03-28 18:37:57

标签: android string string-formatting android-resources

包含$的格式字符串之间是否有区别?

%1d%1$d

我注意到,在应用程序代码中,我们两者兼有,而且似乎都可以正常工作。

或使用%1d to %2d%1$d to %2$d

3 个答案:

答案 0 :(得分:1)

请参见java.util.Formatter ...它被称为“显式参数索引”。

在引用1个单个索引时,这没有什么区别,因为不能更改顺序。最常见的用法是在传递一个参数的同时在同一字符串中替换两次。

完整模式如下所示:

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

答案 1 :(得分:1)

对于有相同问题的任何人:他们不是同一个人

对于发布的示例:

  

<div style={{ position: 'absolute', zIndex: 1, pointerEvents: 'none', //<---- remove this line right: 10, top: 10, backgroundColor: 'white', }}>%1d to %2d

正如Martin所分享的,格式模式为:

%1$d to %2$d

正则表达式通过不放置%[argument_index$][flags][width][.precision]conversion,将$%1等用于以下正则表达式参数。

%2需要一些特定值,因此flags1被用作2参数,它指定了最小宽度 。如果继续使用相同的模式,最终将得到以下结果:

width

当然,当使用String.format("Hello: '%1d' '%2d' '%3d' '%4d'", 1, 2, 3, 4); ==> Hello: '1' ' 2' ' 3' ' 4' 参数时,%number不会代表所需的参数顺序:

width

答案 2 :(得分:1)

  

%d-仅显示数字

int first = 10;
System.out.printf("%d", first);
// output:
// 10

  

%1d-显示编号,其中包含应“保留”多少空间(至少一个)的信息

int first = 10;
System.out.printf("->%1d<-", first);
// output:
// ->10<-
  

%9d-保留“ 9”个字符(如果数字会更短-在此放置空格)并向右对齐

int first = 10;
System.out.printf("->%9d<-", first);
// output:
// ->       10<-
//   123456789
  

%-9d-与上面相同,但与LEFT对齐(此minus很重要)

int first = 10;
System.out.printf("->%-9d<-", first);
// output:
// ->10       <-
//   123456789

  

%1$d-使用varargs中元素的位置(以格式表示)(因此您可以重新使用元素,而不必两次传递它们)

int first = 10;
int second = 20;
System.out.printf("%1$d %2$d %1$d", first, second);
// output:
// 10 20 10

  

%1$9d-混合两个。获取第一个参数(1$)并保留9个字符(%9d

int first = 10;
System.out.printf("->%1$9d<-", first);
// output:
// ->       10<-
//   123456789