From d3078491ee2bb44a4bafa6487e5fdb46928300f9 Mon Sep 17 00:00:00 2001 From: Hubert Wo <2518652+HubertWo@users.noreply.github.com> Date: Sat, 9 Oct 2021 10:21:56 +0200 Subject: [PATCH 1/5] String.join - boolean - use StringBuilder --- .../java/org/apache/commons/lang3/StringUtils.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 91cde23bfec..6dd8c3e3bc2 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3930,11 +3930,15 @@ public static String join(final boolean[] array, final char delimiter, final int if (endIndex - startIndex <= 0) { return EMPTY; } - final StringJoiner joiner = newStringJoiner(delimiter); + // Using StringBuilder for joining primitives + StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - joiner.add(String.valueOf(array[i])); + stringBuilder.append(array[i]); + if (i != endIndex - 1) { + stringBuilder.append(delimiter); + } } - return joiner.toString(); + return stringBuilder.toString(); } /** From 5bd4ba3317c18556bb3ee5a62b6f4eb88d17227f Mon Sep 17 00:00:00 2001 From: Hubert Wo <2518652+HubertWo@users.noreply.github.com> Date: Sat, 9 Oct 2021 10:48:02 +0200 Subject: [PATCH 2/5] Replaced StringJoiner by StringBuilder --- .../org/apache/commons/lang3/StringUtils.java | 82 ++++++++++--------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 6dd8c3e3bc2..812721ab2bf 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3930,7 +3930,7 @@ public static String join(final boolean[] array, final char delimiter, final int if (endIndex - startIndex <= 0) { return EMPTY; } - // Using StringBuilder for joining primitives + StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { stringBuilder.append(array[i]); @@ -4011,11 +4011,14 @@ public static String join(final byte[] array, final char delimiter, final int st if (endIndex - startIndex <= 0) { return EMPTY; } - final StringJoiner joiner = newStringJoiner(delimiter); + StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - joiner.add(String.valueOf(array[i])); + stringBuilder.append(array[i]); + if (i != endIndex - 1) { + stringBuilder.append(delimiter); + } } - return joiner.toString(); + return stringBuilder.toString(); } /** @@ -4088,11 +4091,15 @@ public static String join(final char[] array, final char delimiter, final int st if (endIndex - startIndex <= 0) { return EMPTY; } - final StringJoiner joiner = newStringJoiner(delimiter); + + StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - joiner.add(String.valueOf(array[i])); + stringBuilder.append(array[i]); + if (i != endIndex - 1) { + stringBuilder.append(delimiter); + } } - return joiner.toString(); + return stringBuilder.toString(); } /** @@ -4165,11 +4172,14 @@ public static String join(final double[] array, final char delimiter, final int if (endIndex - startIndex <= 0) { return EMPTY; } - final StringJoiner joiner = newStringJoiner(delimiter); + final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - joiner.add(String.valueOf(array[i])); + stringBuilder.append(array[i]); + if (i != endIndex - 1) { + stringBuilder.append(delimiter); + } } - return joiner.toString(); + return stringBuilder.toString(); } /** @@ -4242,11 +4252,14 @@ public static String join(final float[] array, final char delimiter, final int s if (endIndex - startIndex <= 0) { return EMPTY; } - final StringJoiner joiner = newStringJoiner(delimiter); + final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - joiner.add(String.valueOf(array[i])); + stringBuilder.append(array[i]); + if (i != endIndex - 1) { + stringBuilder.append(delimiter); + } } - return joiner.toString(); + return stringBuilder.toString(); } /** @@ -4319,11 +4332,14 @@ public static String join(final int[] array, final char delimiter, final int sta if (endIndex - startIndex <= 0) { return EMPTY; } - final StringJoiner joiner = newStringJoiner(delimiter); + final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - joiner.add(String.valueOf(array[i])); + stringBuilder.append(array[i]); + if (i != endIndex - 1) { + stringBuilder.append(delimiter); + } } - return joiner.toString(); + return stringBuilder.toString(); } /** @@ -4605,11 +4621,14 @@ public static String join(final long[] array, final char delimiter, final int st if (endIndex - startIndex <= 0) { return EMPTY; } - final StringJoiner joiner = newStringJoiner(delimiter); + final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - joiner.add(String.valueOf(array[i])); + stringBuilder.append(array[i]); + if (i != endIndex - 1) { + stringBuilder.append(delimiter); + } } - return joiner.toString(); + return stringBuilder.toString(); } /** @@ -4668,17 +4687,7 @@ public static String join(final Object[] array, final char delimiter) { * @since 2.0 */ public static String join(final Object[] array, final char delimiter, final int startIndex, final int endIndex) { - if (array == null) { - return null; - } - if (endIndex - startIndex <= 0) { - return EMPTY; - } - final StringJoiner joiner = newStringJoiner(delimiter); - for (int i = startIndex; i < endIndex; i++) { - joiner.add(toStringOrEmpty(array[i])); - } - return joiner.toString(); + return join(array, String.valueOf(delimiter), startIndex, endIndex); } /** @@ -4830,11 +4839,14 @@ public static String join(final short[] array, final char delimiter, final int s if (endIndex - startIndex <= 0) { return EMPTY; } - final StringJoiner joiner = newStringJoiner(delimiter); + final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - joiner.add(String.valueOf(array[i])); + stringBuilder.append(array[i]); + if (i != endIndex - 1) { + stringBuilder.append(delimiter); + } } - return joiner.toString(); + return stringBuilder.toString(); } /** @@ -5526,10 +5538,6 @@ public static String mid(final String str, int pos, final int len) { return str.substring(pos, pos + len); } - private static StringJoiner newStringJoiner(final char delimiter) { - return new StringJoiner(String.valueOf(delimiter)); - } - /** *

* Similar to Date: Sat, 9 Oct 2021 10:55:18 +0200 Subject: [PATCH 3/5] Fix: formatting, removed condition in for --- .../org/apache/commons/lang3/StringUtils.java | 96 ++++++++++--------- 1 file changed, 51 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 812721ab2bf..5874d14918e 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3930,15 +3930,15 @@ public static String join(final boolean[] array, final char delimiter, final int if (endIndex - startIndex <= 0) { return EMPTY; } - - StringBuilder stringBuilder = new StringBuilder(); + final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - stringBuilder.append(array[i]); - if (i != endIndex - 1) { - stringBuilder.append(delimiter); - } + stringBuilder + .append(array[i]) + .append(delimiter); } - return stringBuilder.toString(); + return stringBuilder + .deleteCharAt(stringBuilder.length() - 1) + .toString(); } /** @@ -4011,14 +4011,15 @@ public static String join(final byte[] array, final char delimiter, final int st if (endIndex - startIndex <= 0) { return EMPTY; } - StringBuilder stringBuilder = new StringBuilder(); + final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - stringBuilder.append(array[i]); - if (i != endIndex - 1) { - stringBuilder.append(delimiter); - } + stringBuilder + .append(array[i]) + .append(delimiter); } - return stringBuilder.toString(); + return stringBuilder + .deleteCharAt(stringBuilder.length() - 1) + .toString(); } /** @@ -4091,15 +4092,15 @@ public static String join(final char[] array, final char delimiter, final int st if (endIndex - startIndex <= 0) { return EMPTY; } - - StringBuilder stringBuilder = new StringBuilder(); + final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - stringBuilder.append(array[i]); - if (i != endIndex - 1) { - stringBuilder.append(delimiter); - } + stringBuilder + .append(array[i]) + .append(delimiter); } - return stringBuilder.toString(); + return stringBuilder + .deleteCharAt(stringBuilder.length() - 1) + .toString(); } /** @@ -4174,12 +4175,13 @@ public static String join(final double[] array, final char delimiter, final int } final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - stringBuilder.append(array[i]); - if (i != endIndex - 1) { - stringBuilder.append(delimiter); - } + stringBuilder + .append(array[i]) + .append(delimiter); } - return stringBuilder.toString(); + return stringBuilder + .deleteCharAt(stringBuilder.length() - 1) + .toString(); } /** @@ -4254,12 +4256,13 @@ public static String join(final float[] array, final char delimiter, final int s } final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - stringBuilder.append(array[i]); - if (i != endIndex - 1) { - stringBuilder.append(delimiter); - } + stringBuilder + .append(array[i]) + .append(delimiter); } - return stringBuilder.toString(); + return stringBuilder + .deleteCharAt(stringBuilder.length() - 1) + .toString(); } /** @@ -4334,12 +4337,13 @@ public static String join(final int[] array, final char delimiter, final int sta } final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - stringBuilder.append(array[i]); - if (i != endIndex - 1) { - stringBuilder.append(delimiter); - } + stringBuilder + .append(array[i]) + .append(delimiter); } - return stringBuilder.toString(); + return stringBuilder + .deleteCharAt(stringBuilder.length() - 1) + .toString(); } /** @@ -4623,12 +4627,13 @@ public static String join(final long[] array, final char delimiter, final int st } final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - stringBuilder.append(array[i]); - if (i != endIndex - 1) { - stringBuilder.append(delimiter); - } + stringBuilder + .append(array[i]) + .append(delimiter); } - return stringBuilder.toString(); + return stringBuilder + .deleteCharAt(stringBuilder.length() - 1) + .toString(); } /** @@ -4841,12 +4846,13 @@ public static String join(final short[] array, final char delimiter, final int s } final StringBuilder stringBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { - stringBuilder.append(array[i]); - if (i != endIndex - 1) { - stringBuilder.append(delimiter); - } + stringBuilder + .append(array[i]) + .append(delimiter); } - return stringBuilder.toString(); + return stringBuilder + .deleteCharAt(stringBuilder.length() - 1) + .toString(); } /** From 517f999fb44a1e8a17b2c4ef527f952eb8fc4e7b Mon Sep 17 00:00:00 2001 From: Hubert Wo <2518652+HubertWo@users.noreply.github.com> Date: Sat, 15 Jan 2022 12:39:33 +0100 Subject: [PATCH 4/5] Use substring instead of deleteCharAt. Computed StringBuilder size for - char, boolean join methods --- .../org/apache/commons/lang3/StringUtils.java | 36 ++++++------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 5874d14918e..64e1694e62d 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3930,15 +3930,13 @@ public static String join(final boolean[] array, final char delimiter, final int if (endIndex - startIndex <= 0) { return EMPTY; } - final StringBuilder stringBuilder = new StringBuilder(); + final StringBuilder stringBuilder = new StringBuilder( array.length * 5 + array.length - 1); for (int i = startIndex; i < endIndex; i++) { stringBuilder .append(array[i]) .append(delimiter); } - return stringBuilder - .deleteCharAt(stringBuilder.length() - 1) - .toString(); + return stringBuilder.substring(0, stringBuilder.length() - 1); } /** @@ -4017,9 +4015,7 @@ public static String join(final byte[] array, final char delimiter, final int st .append(array[i]) .append(delimiter); } - return stringBuilder - .deleteCharAt(stringBuilder.length() - 1) - .toString(); + return stringBuilder.substring(0, stringBuilder.length() - 1); } /** @@ -4092,15 +4088,13 @@ public static String join(final char[] array, final char delimiter, final int st if (endIndex - startIndex <= 0) { return EMPTY; } - final StringBuilder stringBuilder = new StringBuilder(); + final StringBuilder stringBuilder = new StringBuilder( array.length * 2 - 1); for (int i = startIndex; i < endIndex; i++) { stringBuilder .append(array[i]) .append(delimiter); } - return stringBuilder - .deleteCharAt(stringBuilder.length() - 1) - .toString(); + return stringBuilder.substring(0, stringBuilder.length() - 1); } /** @@ -4179,9 +4173,7 @@ public static String join(final double[] array, final char delimiter, final int .append(array[i]) .append(delimiter); } - return stringBuilder - .deleteCharAt(stringBuilder.length() - 1) - .toString(); + return stringBuilder.substring(0, stringBuilder.length() - 1); } /** @@ -4260,9 +4252,7 @@ public static String join(final float[] array, final char delimiter, final int s .append(array[i]) .append(delimiter); } - return stringBuilder - .deleteCharAt(stringBuilder.length() - 1) - .toString(); + return stringBuilder.substring(0, stringBuilder.length() - 1); } /** @@ -4341,9 +4331,7 @@ public static String join(final int[] array, final char delimiter, final int sta .append(array[i]) .append(delimiter); } - return stringBuilder - .deleteCharAt(stringBuilder.length() - 1) - .toString(); + return stringBuilder.substring(0, stringBuilder.length() - 1); } /** @@ -4631,9 +4619,7 @@ public static String join(final long[] array, final char delimiter, final int st .append(array[i]) .append(delimiter); } - return stringBuilder - .deleteCharAt(stringBuilder.length() - 1) - .toString(); + return stringBuilder.substring(0, stringBuilder.length() - 1); } /** @@ -4850,9 +4836,7 @@ public static String join(final short[] array, final char delimiter, final int s .append(array[i]) .append(delimiter); } - return stringBuilder - .deleteCharAt(stringBuilder.length() - 1) - .toString(); + return stringBuilder.substring(0, stringBuilder.length() - 1); } /** From a77bcf0d2ad741e4095ffbe165f6698963ec1e67 Mon Sep 17 00:00:00 2001 From: Hubert Wo <2518652+HubertWo@users.noreply.github.com> Date: Sat, 15 Jan 2022 12:48:06 +0100 Subject: [PATCH 5/5] Reformating --- src/main/java/org/apache/commons/lang3/StringUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 64e1694e62d..92477e8a8b2 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3930,7 +3930,7 @@ public static String join(final boolean[] array, final char delimiter, final int if (endIndex - startIndex <= 0) { return EMPTY; } - final StringBuilder stringBuilder = new StringBuilder( array.length * 5 + array.length - 1); + final StringBuilder stringBuilder = new StringBuilder(array.length * 5 + array.length - 1); for (int i = startIndex; i < endIndex; i++) { stringBuilder .append(array[i]) @@ -4088,7 +4088,7 @@ public static String join(final char[] array, final char delimiter, final int st if (endIndex - startIndex <= 0) { return EMPTY; } - final StringBuilder stringBuilder = new StringBuilder( array.length * 2 - 1); + final StringBuilder stringBuilder = new StringBuilder(array.length * 2 - 1); for (int i = startIndex; i < endIndex; i++) { stringBuilder .append(array[i])