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

Reply via email to