diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 45ff9ceb6..6677101d8 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -27,8 +27,10 @@ import java.util.Locale; import java.util.Objects; import java.util.Set; +import java.util.StringJoiner; import java.util.function.Supplier; import java.util.regex.Pattern; +import java.util.stream.IntStream; import org.apache.commons.lang3.function.ToBooleanBiFunction; @@ -1147,6 +1149,35 @@ public static boolean containsAny(final CharSequence cs, final CharSequence... s return containsAny(StringUtils::contains, cs, searchCharSequences); } + /** + *
+ * Checks if the CharSequence contains any of the CharSequences in the given array. + *
+ * + *+ * A {@code null} {@code cs} CharSequence will return {@code false}. A {@code null} or zero length search array will + * return {@code false}. + *
+ * + * @param cs The CharSequence to check, may be null + * @param searchCharSequences The array of CharSequences to search for, may be null. Individual CharSequences may be + * null as well. + * @return {@code true} if any of the search CharSequences are found, {@code false} otherwise + * @since 3.12 + */ + private static boolean containsAny(final ToBooleanBiFunction* Checks if the CharSequence contains any of the CharSequences in the given array, ignoring case. @@ -1180,35 +1211,6 @@ public static boolean containsAnyIgnoreCase(final CharSequence cs, final CharSeq return containsAny(StringUtils::containsIgnoreCase, cs, searchCharSequences); } - /** - *
- * Checks if the CharSequence contains any of the CharSequences in the given array. - *
- * - *- * A {@code null} {@code cs} CharSequence will return {@code false}. A {@code null} or zero length search array will - * return {@code false}. - *
- * - * @param cs The CharSequence to check, may be null - * @param searchCharSequences The array of CharSequences to search for, may be null. Individual CharSequences may be - * null as well. - * @return {@code true} if any of the search CharSequences are found, {@code false} otherwise - * @since 3.12 - */ - private static boolean containsAny(final ToBooleanBiFunctionChecks if CharSequence contains a search CharSequence irrespective of case,
* handling {@code null}. Case-insensitivity is defined as by
@@ -3877,16 +3879,16 @@ public static boolean isWhitespace(final CharSequence cs) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @return the joined String, {@code null} if null array input
* @since 3.12
*/
- public static String join(final boolean[] array, final char separator) {
+ public static String join(final boolean[] array, final char delimiter) {
if (array == null) {
return null;
}
- return join(array, separator, 0, array.length);
+ return join(array, delimiter, 0, array.length);
}
/**
@@ -3908,7 +3910,7 @@ public static String join(final boolean[] array, final char separator) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @param startIndex
* the first index to start joining from. It is an error to pass in a start index past the end of the
@@ -3919,21 +3921,18 @@ public static String join(final boolean[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 3.12
*/
- public static String join(final boolean[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final boolean[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- buf.append(array[startIndex]);
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- buf.append(array[i]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(String.valueOf(array[i]));
}
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -3956,16 +3955,16 @@ public static String join(final boolean[] array, final char separator, final int
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final byte[] array, final char separator) {
+ public static String join(final byte[] array, final char delimiter) {
if (array == null) {
return null;
}
- return join(array, separator, 0, array.length);
+ return join(array, delimiter, 0, array.length);
}
/**
@@ -3988,7 +3987,7 @@ public static String join(final byte[] array, final char separator) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @param startIndex
* the first index to start joining from. It is an error to pass in a start index past the end of the
@@ -3999,21 +3998,18 @@ public static String join(final byte[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final byte[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final byte[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- buf.append(array[startIndex]);
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- buf.append(array[i]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(String.valueOf(array[i]));
}
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4036,16 +4032,16 @@ public static String join(final byte[] array, final char separator, final int st
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final char[] array, final char separator) {
+ public static String join(final char[] array, final char delimiter) {
if (array == null) {
return null;
}
- return join(array, separator, 0, array.length);
+ return join(array, delimiter, 0, array.length);
}
/**
@@ -4068,7 +4064,7 @@ public static String join(final char[] array, final char separator) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @param startIndex
* the first index to start joining from. It is an error to pass in a start index past the end of the
@@ -4079,21 +4075,18 @@ public static String join(final char[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final char[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final char[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- buf.append(array[startIndex]);
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- buf.append(array[i]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(String.valueOf(array[i]));
}
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4116,16 +4109,16 @@ public static String join(final char[] array, final char separator, final int st
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final double[] array, final char separator) {
+ public static String join(final double[] array, final char delimiter) {
if (array == null) {
return null;
}
- return join(array, separator, 0, array.length);
+ return join(array, delimiter, 0, array.length);
}
/**
@@ -4148,7 +4141,7 @@ public static String join(final double[] array, final char separator) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @param startIndex
* the first index to start joining from. It is an error to pass in a start index past the end of the
@@ -4159,21 +4152,18 @@ public static String join(final double[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final double[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final double[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- buf.append(array[startIndex]);
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- buf.append(array[i]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(String.valueOf(array[i]));
}
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4196,16 +4186,16 @@ public static String join(final double[] array, final char separator, final int
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final float[] array, final char separator) {
+ public static String join(final float[] array, final char delimiter) {
if (array == null) {
return null;
}
- return join(array, separator, 0, array.length);
+ return join(array, delimiter, 0, array.length);
}
/**
@@ -4228,7 +4218,7 @@ public static String join(final float[] array, final char separator) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @param startIndex
* the first index to start joining from. It is an error to pass in a start index past the end of the
@@ -4239,21 +4229,18 @@ public static String join(final float[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final float[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final float[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- buf.append(array[startIndex]);
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- buf.append(array[i]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(String.valueOf(array[i]));
}
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4308,7 +4295,7 @@ public static String join(final int[] array, final char separator) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @param startIndex
* the first index to start joining from. It is an error to pass in a start index past the end of the
@@ -4319,21 +4306,18 @@ public static String join(final int[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final int[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final int[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- buf.append(array[startIndex]);
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- buf.append(array[i]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(String.valueOf(array[i]));
}
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4403,7 +4387,7 @@ public static String join(final Iterator> iterator, final char separator) {
}
final Object first = iterator.next();
if (!iterator.hasNext()) {
- return Objects.toString(first, EMPTY);
+ return toStringOrEmpty(first);
}
// two or more elements
@@ -4597,7 +4581,7 @@ public static String join(final long[] array, final char separator) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @param startIndex
* the first index to start joining from. It is an error to pass in a start index past the end of the
@@ -4608,21 +4592,18 @@ public static String join(final long[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final long[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final long[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- buf.append(array[startIndex]);
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- buf.append(array[i]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(String.valueOf(array[i]));
}
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4643,15 +4624,15 @@ public static String join(final long[] array, final char separator, final int st
*
*
* @param array the array of values to join together, may be null
- * @param separator the separator character to use
+ * @param delimiter the separator character to use
* @return the joined String, {@code null} if null array input
* @since 2.0
*/
- public static String join(final Object[] array, final char separator) {
+ public static String join(final Object[] array, final char delimiter) {
if (array == null) {
return null;
}
- return join(array, separator, 0, array.length);
+ return join(array, delimiter, 0, array.length);
}
/**
@@ -4672,7 +4653,7 @@ public static String join(final Object[] array, final char separator) {
*
*
* @param array the array of values to join together, may be null
- * @param separator the separator character to use
+ * @param delimiter the separator character to use
* @param startIndex the first index to start joining from. It is
* an error to pass in a start index past the end of the array
* @param endIndex the index to stop joining from (exclusive). It is
@@ -4680,25 +4661,18 @@ public static String join(final Object[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 2.0
*/
- public static String join(final Object[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final Object[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- if (array[startIndex] != null) {
- buf.append(array[startIndex]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(toStringOrEmpty(array[i]));
}
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- if (array[i] != null) {
- buf.append(array[i]);
- }
- }
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4721,14 +4695,14 @@ public static String join(final Object[] array, final char separator, final int
*
*
* @param array the array of values to join together, may be null
- * @param separator the separator character to use, null treated as ""
+ * @param delimiter the separator character to use, null treated as ""
* @return the joined String, {@code null} if null array input
*/
- public static String join(final Object[] array, final String separator) {
+ public static String join(final Object[] array, final String delimiter) {
if (array == null) {
return null;
}
- return join(array, separator, 0, array.length);
+ return join(array, delimiter, 0, array.length);
}
/**
@@ -4754,7 +4728,7 @@ public static String join(final Object[] array, final String separator) {
*
*
* @param array the array of values to join together, may be null
- * @param separator the separator character to use, null treated as ""
+ * @param delimiter the separator character to use, null treated as ""
* @param startIndex the first index to start joining from.
* @param endIndex the index to stop joining from (exclusive).
* @return the joined String, {@code null} if null array input; or the empty string
@@ -4766,35 +4740,18 @@ public static String join(final Object[] array, final String separator) {
* {@code endIndex < 0} or
* {@code endIndex > array.length()}
*/
- public static String join(final Object[] array, String separator, final int startIndex, final int endIndex) {
+ public static String join(final Object[] array, String delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- if (separator == null) {
- separator = EMPTY;
- }
-
- // endIndex - startIndex > 0: Len = NofStrings *(len(firstString) + len(separator))
- // (Assuming that all Strings are roughly equally long)
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
-
- final StringBuilder buf = newStringBuilder(noOfItems);
-
- if (array[startIndex] != null) {
- buf.append(array[startIndex]);
+ final StringJoiner joiner = new StringJoiner(toStringOrEmpty(delimiter));
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(toStringOrEmpty(array[i]));
}
-
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
-
- if (array[i] != null) {
- buf.append(array[i]);
- }
- }
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4817,16 +4774,16 @@ public static String join(final Object[] array, String separator, final int star
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final short[] array, final char separator) {
+ public static String join(final short[] array, final char delimiter) {
if (array == null) {
return null;
}
- return join(array, separator, 0, array.length);
+ return join(array, delimiter, 0, array.length);
}
/**
@@ -4849,7 +4806,7 @@ public static String join(final short[] array, final char separator) {
*
* @param array
* the array of values to join together, may be null
- * @param separator
+ * @param delimiter
* the separator character to use
* @param startIndex
* the first index to start joining from. It is an error to pass in a start index past the end of the
@@ -4860,21 +4817,18 @@ public static String join(final short[] array, final char separator) {
* @return the joined String, {@code null} if null array input
* @since 3.2
*/
- public static String join(final short[] array, final char separator, final int startIndex, final int endIndex) {
+ public static String join(final short[] array, final char delimiter, final int startIndex, final int endIndex) {
if (array == null) {
return null;
}
- final int noOfItems = endIndex - startIndex;
- if (noOfItems <= 0) {
+ if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringBuilder buf = newStringBuilder(noOfItems);
- buf.append(array[startIndex]);
- for (int i = startIndex + 1; i < endIndex; i++) {
- buf.append(separator);
- buf.append(array[i]);
+ final StringJoiner joiner = newStringJoiner(delimiter);
+ for (int i = startIndex; i < endIndex; i++) {
+ joiner.add(String.valueOf(array[i]));
}
- return buf.toString();
+ return joiner.toString();
}
/**
@@ -4918,32 +4872,17 @@ public static