我在资源包中存储了一些消息。我尝试按如下方式格式化这些消息。
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
一样逃避它,尽管它没有用。要使其发挥作用需要做哪些改变?
答案 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.