gpt4 book ai didi

java - MessageFormat 中的嵌套选择子句?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:17:53 27 4
gpt4 key购买 nike

我试图用 java.text.MessageFormat 做一个简单的逻辑:

MessageFormat cf = new MessageFormat(
"{0,choice, 1<hello|5<{1,choice,1<more than one|4<more than four}}");

Object[] array = {3, 1};
System.out.println(cf.format(array));

用的话:如果第一个参数大于1打印“你好”,如果大于5如果第二个参数大于1打印“不止一个”如果第二个参数大于4打印“超过四个”。

我发现没有人说这是不可能的,但我得到一个 IllegalArgumentException:

Choice Pattern incorrect: 1<hello|5<{1,choice,1<more than one|4<more than four}

我有办法做到这一点吗?谢谢!

整个堆栈跟踪:

Exception in thread "main" java.lang.IllegalArgumentException: Choice Pattern incorrect:  1<hello|5<{1,choice,1<more than one|4<more than four}
at java.text.MessageFormat.makeFormat(Unknown Source)
at java.text.MessageFormat.applyPattern(Unknown Source)
at java.text.MessageFormat.<init>(Unknown Source)
at test.Test5.main(Test5.java:18)
Caused by: java.lang.IllegalArgumentException
at java.text.ChoiceFormat.applyPattern(Unknown Source)
at java.text.ChoiceFormat.<init>(Unknown Source)
... 4 more

最佳答案

如果你这样写模式,ChoiceFormat 无法解析格式,因为它不知道格式分隔符 (|) 等控制字符是否用于内部格式或外部格式。但是如果你引用嵌套的格式,你可以告诉解析器引用的文本不包含它应该解析的任何控制字符。 ChoiceFormat 将返回包含另一个 ChoiceFormat 模式的文本。

如果 MessageFormat 类应用了 ChoiceFormat,它会将结果再次解析为 MessageFormat 以处理额外的参数处理,然后处理内部选择格式

所以如果你这样写模式,代码就可以工作了:

MessageFormat cf = new MessageFormat(
"{0,choice, 1<hello|5<'{1,choice,1<more than one|4<more than four}'}");

Object[] array = {3, 1};
System.out.println(cf.format(array));

关于java - MessageFormat 中的嵌套选择子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22913055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com