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

时间:2013-07-10 11:34:11

标签: java resourcebundle

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

import java.text.MessageFormat;

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

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

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

  

您即将删除{0}行。

占位符不会替换为实际参数。


这是撇号 - You're。我试图像You\\'re一样逃避它,尽管它没有用。要使其发挥作用需要做哪些改变?

6 个答案:

答案 0 :(得分:91)

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

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

MessageFormat模式中的撇号(又名单引号)启动带引号的字符串,并且不会自行解释。来自javadoc

  

单引号本身必须用整个字符串中的双引号表示。

String You\\'re相当于向String添加反斜杠字符,因此唯一的区别是You\re将生成而不是Youre 。 (在应用双引号解决方案''之前)

答案 1 :(得分:9)

请确保您使用过双撇号('')

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

修改

  

在String中,一对单引号可用于引用除单引号之外的任意字符。例如,模式字符串"' {0}'"表示字符串" {0}",而不是FormatElement。   ...

     

在给定模式的末尾,任何不匹配的引用都被视为已关闭。例如,模式字符串" ' {0}"被视为模式" ' {0} ' "。

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

答案 2 :(得分:6)

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:1)

使用撇号(Unicode:\u2019)而不是单引号'修复了问题而不会使\'加倍。

答案 5 :(得分:0)

这是一种无需编辑代码即可使用的方法,而与字符数无关。

const [Graphic] = await loadModules(["esri/Graphic"]);
// here use fromJSON method to create the graphic
let g =  Graphic.fromJSON(data); // data which is json i gave.