使用Java中的MessageFormat.format()格式化消息

我在资源包中存储了一些消息。 我试图格式化这些消息如下。

import java.text.MessageFormat; String text = MessageFormat.format("You're about to delete {0} rows.", 5); System.out.println(text); 

假设第一个参数即实际的消息被存储在一个属性文件中,该文件以某种方式被检索。

第二个参数,即5是一个dynamic值,应放置在占位符{0} ,这不会发生。 下一行打印,

您即将删除{0}行。

占位符不会被实际参数replace。


这里是撇号 – You're 。 我曾试图像往常一样逃避它,尽pipe它没有奏效。 需要进行哪些更改才能使其工作?

MessageFormat模式String添加一个额外的撇号,以确保显示'字符”

 String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5); ^ 

MessageFormat模式中的撇号(又名单引号 )会启动带引号的string,而不会自行解释。 从javadoc

单引号本身必须用整个string中的双引号“'表示。

String You\\'re相当于给String添加一个反斜杠字符,所以唯一的区别是You\re将会被生成而不是你。 (在双引号解决scheme应用之前)

只要确定你使用双撇号('')

 String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5); System.out.println(text); 

编辑:

在一个string中,可以使用一对单引号引用除单引号以外的任意字符。 例如,模式string“{0}”代表string“{0}”,而不是FormatElement。 …

任何不匹配的引用在给定模式结束时被视为closures。 例如,模式string“{0}”被视为模式“{0}”。

来源http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html

你需要在“You''re”中使用双撇号而不是单撇号,例如:

 String text = java.text.MessageFormat.format("You''re about to delete {0} rows.", 5); System.out.println(text); 

对于string.xml中存在Android问题的每个人,请使用\'\'而不是单引号。