This is an automated email from the ASF dual-hosted git repository.
garydgregory 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 b1aba6833 fix StrBuilder.lastIndexOf(String) start index for an empty
search (#1759)
b1aba6833 is described below
commit b1aba6833f31ac2c9cc5a1302cac966f997db31e
Author: alhuda <[email protected]>
AuthorDate: Thu Jul 30 15:22:02 2026 +0530
fix StrBuilder.lastIndexOf(String) start index for an empty search (#1759)
The no-index overload delegated to lastIndexOf(String, int) with
size - 1, but the last valid start position for an empty search string
is size. new StrBuilder("abc").lastIndexOf("") returned 2 instead of 3,
and an empty builder returned -1 instead of 0. That disagreed with
String.lastIndexOf, StringBuilder.lastIndexOf and StringUtils.lastIndexOf,
and with StrBuilder's own indexOf and contains.
Non-empty searches are unaffected, because their last possible match
start is size - str.length(), which is at most size - 1.
---
src/main/java/org/apache/commons/lang3/text/StrBuilder.java | 2 +-
src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java | 5 +++++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
index 7010b4e4b..d177ebed9 100644
--- a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
@@ -2362,7 +2362,7 @@ public int lastIndexOf(final char ch, int startIndex) {
* @return The last index of the string, or -1 if not found.
*/
public int lastIndexOf(final String str) {
- return lastIndexOf(str, size - 1);
+ return lastIndexOf(str, size);
}
/**
diff --git a/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
b/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
index 2d86d29d1..6958ab676 100644
--- a/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
@@ -1059,6 +1059,11 @@ void testLastIndexOf_String() {
assertEquals(1, sb.lastIndexOf("ba"));
assertEquals("abab".lastIndexOf("ba"), sb.lastIndexOf("ba"));
+ assertEquals(4, sb.lastIndexOf(""));
+ //should work like String#lastIndexOf
+ assertEquals("abab".lastIndexOf(""), sb.lastIndexOf(""));
+ assertEquals("".lastIndexOf(""), new StrBuilder().lastIndexOf(""));
+
assertEquals(-1, sb.lastIndexOf("z"));
assertEquals(-1, sb.lastIndexOf((String) null));