我在几个项目中使用 MessageFormat 时遇到问题。在基础项目中,我们使用消息格式来构建警告消息,例如:
Exception for a char ({0}).
在另一个项目中,我使用基础项目做某事,并将使用来自基础项目的消息记录消息。
The request success but a warning comes from the base project: [ {0}].
在基础项目中,警告输入是转义大括号 {。所以消息是“字符({)的例外”。第二个项目中的消息是“请求成功,但来自基础项目的警告:[ 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("'", "''");
解决方法是替换最终错误消息中的特殊字符。那么当另一个项目需要引用该消息时,也不例外。
或者,是否不建议引用其他项目的消息?
项目 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 );