在 Java 中使用 MessageFormat.format() 设置消息的格式

2022-08-31 11:32:24

我在资源包中存储了一些消息。我正在尝试按如下方式设置这些邮件的格式。

import java.text.MessageFormat;

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

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

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

您即将删除{0}行。

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


这是这里的撇号 - 。我试图像往常一样逃避它,尽管它不起作用。需要进行哪些更改才能使其正常工作?You'reYou\\'re


答案 1

向图案添加一个额外的撇号以确保显示字符'MessageFormatString'

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

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

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

这相当于向 添加一个反斜杠字符,因此唯一的区别是将产生而不是 。(在应用双引号解决方案之前)StringYou\\'reStringYou\reYoure''


答案 2

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

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

编辑:

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

任何不匹配的报价都被视为在给定形态结束时关闭。例如,模式字符串“'{0}'”被视为模式“'{0}'”。

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


推荐