This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git
The following commit(s) were added to refs/heads/master by this push:
new 0f7d484 LANG-1675 - Improve performance of StringUtils.join for
primitives (#812)
0f7d484 is described below
commit 0f7d48488277cc64730b4b4ebe791986fa94da4e
Author: Hubert <[email protected]>
AuthorDate: Sun Apr 3 18:52:56 2022 +0200
LANG-1675 - Improve performance of StringUtils.join for primitives (#812)
* String.join - boolean - use StringBuilder
* Replaced StringJoiner by StringBuilder
* Fix: formatting, removed condition in for
* Use substring instead of deleteCharAt. Computed StringBuilder size for -
char, boolean join methods
* Reformating
---
.../java/org/apache/commons/lang3/StringUtils.java | 80 +++++++++++-----------
1 file changed, 41 insertions(+), 39 deletions(-)
diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java
b/src/main/java/org/apache/commons/lang3/StringUtils.java
index 8b1c5d2..9fcd060 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -3930,11 +3930,13 @@ public class StringUtils {
if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringJoiner joiner = newStringJoiner(delimiter);
+ final StringBuilder stringBuilder = new StringBuilder(array.length * 5
+ array.length - 1);
for (int i = startIndex; i < endIndex; i++) {
- joiner.add(String.valueOf(array[i]));
+ stringBuilder
+ .append(array[i])
+ .append(delimiter);
}
- return joiner.toString();
+ return stringBuilder.substring(0, stringBuilder.length() - 1);
}
/**
@@ -4007,11 +4009,13 @@ public class StringUtils {
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])
+ .append(delimiter);
}
- return joiner.toString();
+ return stringBuilder.substring(0, stringBuilder.length() - 1);
}
/**
@@ -4084,11 +4088,13 @@ public class StringUtils {
if (endIndex - startIndex <= 0) {
return EMPTY;
}
- final StringJoiner joiner = newStringJoiner(delimiter);
+ final StringBuilder stringBuilder = new StringBuilder(array.length * 2
- 1);
for (int i = startIndex; i < endIndex; i++) {
- joiner.add(String.valueOf(array[i]));
+ stringBuilder
+ .append(array[i])
+ .append(delimiter);
}
- return joiner.toString();
+ return stringBuilder.substring(0, stringBuilder.length() - 1);
}
/**
@@ -4161,11 +4167,13 @@ public class StringUtils {
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])
+ .append(delimiter);
}
- return joiner.toString();
+ return stringBuilder.substring(0, stringBuilder.length() - 1);
}
/**
@@ -4238,11 +4246,13 @@ public class StringUtils {
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])
+ .append(delimiter);
}
- return joiner.toString();
+ return stringBuilder.substring(0, stringBuilder.length() - 1);
}
/**
@@ -4315,11 +4325,13 @@ public class StringUtils {
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])
+ .append(delimiter);
}
- return joiner.toString();
+ return stringBuilder.substring(0, stringBuilder.length() - 1);
}
/**
@@ -4601,11 +4613,13 @@ public class StringUtils {
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])
+ .append(delimiter);
}
- return joiner.toString();
+ return stringBuilder.substring(0, stringBuilder.length() - 1);
}
/**
@@ -4664,17 +4678,7 @@ public class StringUtils {
* @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);
}
/**
@@ -4826,11 +4830,13 @@ public class StringUtils {
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])
+ .append(delimiter);
}
- return joiner.toString();
+ return stringBuilder.substring(0, stringBuilder.length() - 1);
}
/**
@@ -5522,10 +5528,6 @@ public class StringUtils {
return str.substring(pos, pos + len);
}
- private static StringJoiner newStringJoiner(final char delimiter) {
- return new StringJoiner(String.valueOf(delimiter));
- }
-
/**
* <p>
* Similar to <a