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);
}
/**