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 f4464c2ce Speed up StringUtils.getDigits(String)
f4464c2ce is described below

commit f4464c2ce9a132fba5f9b137747701e6ab9b0c3e
Author: David Du <[email protected]>
AuthorDate: Sun Dec 7 07:21:16 2025 +0800

    Speed up StringUtils.getDigits(String)
    
    Local results:
    ```
    Benchmark                                               (length)  Mode  Cnt 
     Score     Error  Units
    StringUtilsGetDigitsBenchmark.testGetDigitsManually           10  avgt   25 
    19.835 ±   0.321  ns/op
    StringUtilsGetDigitsBenchmark.testGetDigitsManually          100  avgt   25 
    91.149 ±   1.234  ns/op
    StringUtilsGetDigitsBenchmark.testGetDigitsManually         1000  avgt   25 
   777.029 ±   9.725  ns/op
    StringUtilsGetDigitsBenchmark.testGetDigitsManually        10000  avgt   25 
  7883.407 ±  61.312  ns/op
    StringUtilsGetDigitsBenchmark.testGetDigitsWithBuilder        10  avgt   25 
    84.027 ±  36.391  ns/op
    StringUtilsGetDigitsBenchmark.testGetDigitsWithBuilder       100  avgt   25 
   334.174 ± 225.501  ns/op
    StringUtilsGetDigitsBenchmark.testGetDigitsWithBuilder      1000  avgt   25 
  1700.380 ±   2.512  ns/op
    StringUtilsGetDigitsBenchmark.testGetDigitsWithBuilder     10000  avgt   25 
 16191.400 ±  18.637  ns/op
    ```
---
 src/main/java/org/apache/commons/lang3/StringUtils.java | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java 
b/src/main/java/org/apache/commons/lang3/StringUtils.java
index e4b9ed74f..cfe639dad 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -2043,15 +2043,17 @@ public static String getDigits(final String str) {
         if (isEmpty(str)) {
             return str;
         }
-        final int sz = str.length();
-        final StringBuilder strDigits = new StringBuilder(sz);
-        for (int i = 0; i < sz; i++) {
+        final int len = str.length();
+        final char[] buffer = new char[len];
+        int count = 0;
+
+        for (int i = 0; i < len; i++) {
             final char tempChar = str.charAt(i);
             if (Character.isDigit(tempChar)) {
-                strDigits.append(tempChar);
+                buffer[count++] = tempChar;
             }
         }
-        return strDigits.toString();
+        return new String(buffer, 0, count);
     }
 
     /**

Reply via email to