diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/ListFormatter.java b/icu4j/main/classes/core/src/com/ibm/icu/text/ListFormatter.java index 559171bd09e..6e842af188c 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/ListFormatter.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/ListFormatter.java @@ -147,9 +147,11 @@ final public class ListFormatter { if (i0 < 0 || i1 < 0) { throw new IllegalArgumentException("Missing {0} or {1} in pattern " + pattern); } - return i0 < i1 - ? pattern.substring(0, i0) + a + pattern.substring(i0+3, i1) + b + pattern.substring(i1+3) - : pattern.substring(0, i1) + a + pattern.substring(i1+3, i0) + b + pattern.substring(i0+3); + if (i0 < i1) { + return pattern.substring(0, i0) + a + pattern.substring(i0+3, i1) + b + pattern.substring(i1+3); + } else { + return pattern.substring(0, i1) + b + pattern.substring(i1+3, i0) + a + pattern.substring(i0+3); + } } /** JUST FOR DEVELOPMENT */ diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/ListFormatterTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/ListFormatterTest.java index 1c84cb1d3cd..2bdb1df6012 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/ListFormatterTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/ListFormatterTest.java @@ -63,6 +63,20 @@ public class ListFormatterTest extends TestFmwk { checkData(ListFormatter.getInstance(ULocale.JAPANESE), JapaneseTestData); } + String[] outOfOrderTestData = { + "", + "A", + "B after A", + "C in the last after B after the first A", + "D in the last after C after B after the first A", + "E in the last after D after C after B after the first A" + }; + public void TestPatternOutOfOrder() { + ListFormatter formatter = new ListFormatter("{1} after {0}", "{1} after the first {0}", "{1} after {0}", + "{1} in the last after {0}"); + checkData(formatter, outOfOrderTestData); + } + String[] RootTestData = { "", "A",