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