用javaMessageFormat编写消息有没有一个原则可以避免转义大括号或引号引起的错误



我在几个项目中遇到了使用MessageFormat的问题。在一个基础项目中,我们使用消息格式来构建警告消息,如:

Exception for a char ({0}).

在另一个项目中,我使用基础项目来做一些事情,并将使用来自基础项目的消息来记录消息。

The request success but a warning comes from the base project: [ {0}].

在基础项目中,警告输入是转义大括号{。因此消息是"字符({)的异常。"而在第二个项目中的消息是"请求成功,但警告来自基础项目:[字符({)的例外。]。"

然而,如果我们在第三个项目中使用第二条消息,它将抛出异常

java.lang.IllegalArgumentException: Unmatched braces in the pattern.
at java.text.MessageFormat.applyPattern(MessageFormat.java:508)
at java.text.MessageFormat.<init>(MessageFormat.java:363)
at java.text.MessageFormat.format(MessageFormat.java:835)

我想知道MessageFormat是否有避免此类异常的原则。我们需要对输入的最终错误消息做些什么。使错误消息可在另一个MessageFormat处理中使用。

    message.replaceAll("{", "'{'");
    message.replaceAll("'", "''");

解决方法是替换最终错误消息中的特殊字符。然后,当另一个项目需要引用消息时,也不会有例外。

或者,引用其他项目的信息是不建议的吗?

关于JAVA MessgeFormat 的一个好问题

C.项目中的代码

Object[] params = new String[]{};
MessageFormat.format("Project A get error from: [ Project B exception caused by char ({)", (Object[]) params );

    String b = "{";
    String errorMessageInA = MessageFormat.format( "Project B exception caused by char ({0})", new String[]{b} );
    String errorMessageInB = MessageFormat.format( "Project A get error from: [{0} ]", new String[]{errorMessageInA} );
    Object[] params = new String[]{};
    String c = MessageFormat.format(errorMessageInB, (Object[]) params );

非常感谢。我想我现在知道问题出在哪里了。谢谢你让我把所有的代码都写下来,这样我就可以更容易地找到问题了。

问题是我使用了字符串c=MessageFormat.format(errorMessageInB,(Object[])params);正确的方法是:String c=MessageFormat.format("{0}",new String[]{errorMessageInB});

我将删除或关闭此问题。转义大括号或单引号可以在输入中,但不能在消息正文中。

谢谢你抽出时间。不建议在消息正文中使用另一个项目的消息结果。

相关内容

  • 没有找到相关文章

最新更新