是否有使用java MessageFormat编写消息的原则,以避免由转义括号或引号引起的错误?

时间:2014-09-28 06:52:14

标签: java design-patterns format braces messageformat

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

Exception for a char ({0}).

在另一个项目中,我使用基础项目执行某些操作,并使用基础项目中的消息记录消息。

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

在基础项目中,警告输入是一个转义括号{。所以消息是“char({)的例外”。第二个项目中的消息是“请求成功但是来自基础项目的警告:[char({)的例外。]。”

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

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("'", "''");

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

或者,引用其他未建议的项目的消息?

A good question about 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 );

1 个答案:

答案 0 :(得分:0)

非常感谢。我想我知道现在的问题是什么。感谢您让我写下所有代码,以便我可以更轻松地找到问题。

问题是我使用String c = MessageFormat.format(errorMessageInB,(Object [])params);正确的方法是这样的:String c = MessageFormat.format(“{0}”,new String [] {errorMessageInB});

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

感谢您的时间。不建议在邮件正文中使用另一个项目的邮件结果。