如何在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");