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-text.git


The following commit(s) were added to refs/heads/master by this push:
     new a0b01817 [TEXT-241] TextStringBuilder.lastIndexOf("") and 
StrBuilder.lastIndexOf("") return incorrect index for empty string (size - 1 
instead of size) (#763)
a0b01817 is described below

commit a0b01817f43bda9cca661b23c237ab1fb9c9d74f
Author: Maksym Korshun <[email protected]>
AuthorDate: Thu Jul 30 13:34:06 2026 +0200

    [TEXT-241] TextStringBuilder.lastIndexOf("") and StrBuilder.lastIndexOf("") 
return incorrect index for empty string (size - 1 instead of size) (#763)
    
    * [TEXT-241] Annotate deprecated StrBuilderTest
    
    * [TEXT-241] Fix lastIndexOf() for empty search strings in StrBuilder and 
TextStringBuilder
    
    * refactor: replace conditional with Math.min
---
 src/main/java/org/apache/commons/text/StrBuilder.java            | 7 +++++--
 src/main/java/org/apache/commons/text/TextStringBuilder.java     | 7 +++++--
 src/test/java/org/apache/commons/text/StrBuilderTest.java        | 4 ++++
 src/test/java/org/apache/commons/text/TextStringBuilderTest.java | 3 +++
 4 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/commons/text/StrBuilder.java 
b/src/main/java/org/apache/commons/text/StrBuilder.java
index 0791a1e4..063d26ec 100644
--- a/src/main/java/org/apache/commons/text/StrBuilder.java
+++ b/src/main/java/org/apache/commons/text/StrBuilder.java
@@ -2275,7 +2275,7 @@ public class StrBuilder implements CharSequence, 
Appendable, Serializable, Build
      * @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);
     }
 
     /**
@@ -2289,7 +2289,7 @@ public class StrBuilder implements CharSequence, 
Appendable, Serializable, Build
      * @return The last index of the string, or -1 if not found.
      */
     public int lastIndexOf(final String str, int startIndex) {
-        startIndex = startIndex >= size ? size - 1 : startIndex;
+        startIndex = Math.min(startIndex, size);
         if (str == null || startIndex < 0) {
             return StringUtils.INDEX_NOT_FOUND;
         }
@@ -2297,6 +2297,9 @@ public class StrBuilder implements CharSequence, 
Appendable, Serializable, Build
         if (strLen == 0) {
             return startIndex;
         }
+        if (startIndex >= size) {
+            startIndex = size - 1;
+        }
         if (strLen > size) {
             return StringUtils.INDEX_NOT_FOUND;
         }
diff --git a/src/main/java/org/apache/commons/text/TextStringBuilder.java 
b/src/main/java/org/apache/commons/text/TextStringBuilder.java
index 2021f8d8..5cf467ac 100644
--- a/src/main/java/org/apache/commons/text/TextStringBuilder.java
+++ b/src/main/java/org/apache/commons/text/TextStringBuilder.java
@@ -2388,7 +2388,7 @@ public class TextStringBuilder implements CharSequence, 
Appendable, Serializable
      * @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);
     }
 
     /**
@@ -2403,7 +2403,7 @@ public class TextStringBuilder implements CharSequence, 
Appendable, Serializable
      * @return The last index of the string, or -1 if not found.
      */
     public int lastIndexOf(final String str, int startIndex) {
-        startIndex = startIndex >= size ? size - 1 : startIndex;
+        startIndex = Math.min(startIndex, size);
         if (str == null || startIndex < 0) {
             return StringUtils.INDEX_NOT_FOUND;
         }
@@ -2411,6 +2411,9 @@ public class TextStringBuilder implements CharSequence, 
Appendable, Serializable
         if (strLen == 0) {
             return startIndex;
         }
+        if (startIndex >= size) {
+            startIndex = size - 1;
+        }
         if (strLen > size) {
             return StringUtils.INDEX_NOT_FOUND;
         }
diff --git a/src/test/java/org/apache/commons/text/StrBuilderTest.java 
b/src/test/java/org/apache/commons/text/StrBuilderTest.java
index ab82eac5..0dd55d8f 100644
--- a/src/test/java/org/apache/commons/text/StrBuilderTest.java
+++ b/src/test/java/org/apache/commons/text/StrBuilderTest.java
@@ -45,6 +45,7 @@ import org.junit.jupiter.api.Test;
  *
  * @deprecated This class will be removed in 2.0.
  */
+@Deprecated
 class StrBuilderTest {
 
     private static final class MockReadable implements Readable {
@@ -1219,6 +1220,9 @@ class StrBuilderTest {
         assertEquals(-1, sb.lastIndexOf("z"));
 
         assertEquals(-1, sb.lastIndexOf((String) null));
+
+        assertEquals(4, sb.lastIndexOf(""));
+        assertEquals("".lastIndexOf(""), new StringBuilder().lastIndexOf(""));
     }
 
     @Test
diff --git a/src/test/java/org/apache/commons/text/TextStringBuilderTest.java 
b/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
index 5c2e117e..2b12a029 100644
--- a/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
+++ b/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
@@ -1394,6 +1394,9 @@ class TextStringBuilderTest {
         assertEquals(-1, sb.lastIndexOf("z"));
 
         assertEquals(-1, sb.lastIndexOf((String) null));
+
+        assertEquals(4, sb.lastIndexOf(""));
+        assertEquals("".lastIndexOf(""), new StringBuilder().lastIndexOf(""));
     }
 
     @Test

Reply via email to