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])