Java MessageFormat - 如何在单引号之间插入值?

TM.*_*TM. 61 java

我在使用java.text.MessageFormat对象时遇到问题.

我正在尝试创建SQL插入语句.问题是,当我做这样的事情时:

MessageFormat messageFormat = "insert into {0} values ( '{1}', '{2}', '{3}', {4} )";
Object[] args = { str0, str1, str2, str3, str4 };
String result = messageFormat.format(args);
Run Code Online (Sandbox Code Playgroud)

我得到这个值为result:

"insert into <str0> values ( {1}, {2}, {3}, <str4> )"
Run Code Online (Sandbox Code Playgroud)

如您所见,问题是由单引号括起的任何目标位置都不会被参数替换.我尝试使用像这样的双引号:''{1}''和像这样的转义字符:\'{1}\'但它仍然给出相同的结果.

编辑:我忘了提到我也试过了'''{1}'''.结果是:"insert into <str0> values ( '{1}', '{2}', '{3}', <str4> )".它保留了原始引号,但仍未插入值.

我该如何解决这个问题?为了记录,我使用的是JDK 6u7.

ser*_*erg 107

我刚试过双引号,它对我来说很好用:

MessageFormat messageFormat = new MessageFormat("insert into {0} values ( ''{1}'', ''{2}'', ''{3}'', {4} )");
Object[] args = {"000", "111", "222","333","444","555"};
String result = messageFormat.format(args);
Run Code Online (Sandbox Code Playgroud)

结果是:

insert into 000 values ( '111', '222', '333', 444 )
Run Code Online (Sandbox Code Playgroud)

这是你需要的吗?


Aid*_*dos 26

很抱歉,如果这不在旁边,但看起来您正在尝试复制已在JDBC中的PreparedStatement.

如果您正在尝试创建针对数据库运行的SQL,那么我建议您查看PreparedStatement,它已经完成了您尝试执行的操作(语法略有不同).

对不起,如果这不是你在做什么,我只是想我会指出它.


Chr*_*ran 10

String中,一对单引号可用于引用除单引号之外的任何任意字符.例如,模式字符串"'{0}'"表示字符串"{0}",而不是FormatElement.单引号本身必须用''整个a中加倍的单引号表示String.例如,模式字符串"'{''}'"被解释为序列'{(引用的开始和左大括号), ''(单引号),和}'(右大括号和报价的端部) '{''}'(援引左和右大括号) :代表字符串"{'}",而不是 "{}".

来自:MessageFormat(Java平台SE 8)