diff --git a/src/changes/changes.xml b/src/changes/changes.xml index f1f71c10d..5d2d1f74a 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -90,6 +90,7 @@ The type attribute can be add,update,fix,remove. Javadoc: StringUtils.repeat("", "x", 3) = "xx"; #918. Fix typos #920, #923. Simplify condition #925. + StringUtils.join(Iterator, String) should only return null when the Iterator is null. Add GitHub coverage.yml. Add EnumUtils.getEnumSystemProperty(...). @@ -160,7 +161,7 @@ The type attribute can be add,update,fix,remove. Let ReflectionToStringBuilder only reflect given field names #849. Add Streams.of(Enumeration<E>). Add Streams.of(Iterable<E>). - Add LangCollectors. + Add Streams.of(Iterator<E>). Bump actions/cache from 2.1.4 to 3.0.7 #742, #752, #764, #833, #867. Bump actions/checkout from 2 to 3 #819, #825, #859. diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 2960c83f7..b316b1468 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -4350,10 +4350,7 @@ public class StringUtils { * @since 2.3 */ public static String join(final Iterable iterable, final char separator) { - if (iterable == null) { - return null; - } - return join(iterable.iterator(), separator); + return iterable != null ? join(iterable.iterator(), separator) : null; } /** @@ -4371,10 +4368,7 @@ public class StringUtils { * @since 2.3 */ public static String join(final Iterable iterable, final String separator) { - if (iterable == null) { - return null; - } - return join(iterable.iterator(), separator); + return iterable != null ? join(iterable.iterator(), separator) : null; } /** @@ -4436,7 +4430,6 @@ public class StringUtils { * @return the joined String, {@code null} if null iterator input */ public static String join(final Iterator iterator, final String separator) { - // handle null, zero and one elements before building a buffer if (iterator == null) { return null; @@ -4444,25 +4437,18 @@ public class StringUtils { if (!iterator.hasNext()) { return EMPTY; } - final Object first = iterator.next(); - if (!iterator.hasNext()) { - return Objects.toString(first, ""); - } // two or more elements final StringBuilder buf = new StringBuilder(STRING_BUILDER_SIZE); // Java default is 16, probably too small - if (first != null) { - buf.append(first); - } while (iterator.hasNext()) { - if (separator != null) { - buf.append(separator); - } final Object obj = iterator.next(); if (obj != null) { buf.append(obj); } + if (separator != null && iterator.hasNext()) { + buf.append(separator); + } } return buf.toString(); } diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java index f7f035c4b..4ef061b91 100644 --- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java @@ -1310,7 +1310,7 @@ public class StringUtilsTest extends AbstractLangTest { assertEquals(TEXT_LIST, StringUtils.join(Arrays.asList(ARRAY_LIST).iterator(), SEPARATOR)); - assertNull(StringUtils.join(Arrays.asList(NULL_TO_STRING_LIST).iterator(), SEPARATOR)); + assertEquals("null", StringUtils.join(Arrays.asList(NULL_TO_STRING_LIST).iterator(), SEPARATOR)); } @Test