如何在Java中格式化string

原始问题,但我如何格式化string像这样:

“{2}”的步骤{1}“

通过用Java代替variables? 在C#中很容易。

除了String.format之外,还要看看java.text.MessageFormat 。 格式不那么简洁,接近您提供的C#示例,您也可以将其用于parsing。

例如:

 int someNumber = 42; String someString = "foobar"; Object[] args = {new Long(someNumber), someString}; MessageFormat fmt = new MessageFormat("String is \"{1}\", number is {0}."); System.out.println(fmt.format(args)); 

一个更好的例子利用了Java 1.5中的可变参数和自动装箱改进,并将上面的代码转换为一行代码:

 MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar"); 

MessageFormat对于使用选项修饰符来执行i18nized复数有一些好处。 要指定一个正确使用单数forms的消息,当一个variables是1,否则,你可以做这样的事情:

 String formatString = "there were {0} {0,choice,0#objects|1#object|1<objects}"; MessageFormat fmt = new MessageFormat(formatString); fmt.format(new Object[] { new Long(numberOfObjects) }); 

看看String.format 。 但请注意,它需要的格式说明符与C的printf函数族相似,例如:

 String.format("Hello %s, %d", "world", 42); 

将返回“你好世界42”。 了解格式说明符时,您可能会发现这很有帮助。 安迪·托马斯·克拉默(Andy Thomas-Cramer)非常友善,在下面的评论中留下了这个链接,似乎指向官方的规范。 最常用的是:

  • %s – 插入一个string
  • %d – 插入一个有符号的整数(十进制)
  • %f – 插入一个实数,标准符号

这与C#完全不同,C#使用位置引用和可选的格式说明符。 这意味着你不能做这样的事情:

 String.format("The {0} is repeated again: {0}", "word"); 

没有实际重复传递给printf / format的参数。 (请参阅下面的Scrum Meister的评论)


如果你只是想直接打印结果,你可能会发现你喜欢System.out.printf( PrintStream.printf )。

如果您select不使用String.format,则另一个选项是+二元运算符

 String str = "Step " + a + " of " + b; 

这相当于

new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));

无论你使用的是你的select。 StringBuilder速度更快,但速度差异很小。 我更喜欢使用+运算符(它做一个StringBuilder.append(String.valueOf(X)))并发现它更容易阅读。

 public class StringFormat { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("================================"); for(int i=0;i<3;i++){ String s1=sc.next(); int x=sc.nextInt(); System.out.println(String.format("%-15s%03d",s1,x)); } System.out.println("================================"); } } 

outpot“================================”
ved15space123 ved15space123 ved15space123“================================

Java解决scheme

  • “ – ”用于保留缩进

  • “15”使string的最小长度为15

  • “s”(这是%之后的几个字符)将被我们的stringreplace
  • 0填充我们的整数与0在左边
  • 3使我们的整数是3的最小长度

我写了我的简单方法:

 public class SomeCommons { /** Message Format like 'Some String {0} / {1}' with arguments */ public static String msgFormat(String s, Object... args) { return new MessageFormat(s).format(args); } } 

所以你可以使用它:

 SomeCommons.msfgFormat("Step {1} of {2}", 1 , "two");