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 2c3748412 drop redundant lowercase in case-insensitive Strings.replace 
(#1697)
2c3748412 is described below

commit 2c3748412e5a4f4f167ac4f15c8fe0a093ea5e2b
Author: alhuda <[email protected]>
AuthorDate: Wed Jun 10 02:00:39 2026 +0530

    drop redundant lowercase in case-insensitive Strings.replace (#1697)
    
    Co-authored-by: alhudz <[email protected]>
---
 src/main/java/org/apache/commons/lang3/Strings.java     |  5 +----
 src/test/java/org/apache/commons/lang3/StringsTest.java | 15 +++++++++++++++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/commons/lang3/Strings.java 
b/src/main/java/org/apache/commons/lang3/Strings.java
index e8ef1fcae..434510ef7 100644
--- a/src/main/java/org/apache/commons/lang3/Strings.java
+++ b/src/main/java/org/apache/commons/lang3/Strings.java
@@ -1288,13 +1288,10 @@ public String replace(final String text, final String 
searchString, final String
      * @param max          maximum number of values to replace, or {@code -1} 
if no maximum
      * @return the text with any replacements processed, {@code null} if null 
String input
      */
-    public String replace(final String text, String searchString, final String 
replacement, int max) {
+    public String replace(final String text, final String searchString, final 
String replacement, int max) {
         if (StringUtils.isEmpty(text) || StringUtils.isEmpty(searchString) || 
replacement == null || max == 0) {
             return text;
         }
-        if (ignoreCase) {
-            searchString = searchString.toLowerCase();
-        }
         int start = 0;
         int end = indexOf(text, searchString, start);
         if (end == INDEX_NOT_FOUND) {
diff --git a/src/test/java/org/apache/commons/lang3/StringsTest.java 
b/src/test/java/org/apache/commons/lang3/StringsTest.java
index 5f74a80a5..650b43e20 100644
--- a/src/test/java/org/apache/commons/lang3/StringsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringsTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.commons.lang3;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -26,6 +27,7 @@
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
+import org.junitpioneer.jupiter.DefaultLocale;
 
 /**
  * Tests {@link Strings}.
@@ -78,6 +80,19 @@ void testCaseInsensitiveStartsWithAny() {
         assertTrue(Strings.CI.startsWithAny(new StringBuffer("AbCxYz"), new 
StringBuilder("XyZ"), new StringBuffer("abc")));
     }
 
+    /**
+     * {@code U+0130} lower-cases to the two-char sequence {@code "i̇"} 
outside Turkish locales, so pre-lower-casing the
+     * search argument made the case-insensitive replace look for a two-char 
needle that no longer matches the single source
+     * character.
+     */
+    @Test
+    @DefaultLocale("en")
+    void testCaseInsensitiveReplaceLengthChangingLowerCase() {
+        assertEquals("aXb", Strings.CI.replace("aİb", "İ", "X", -1));
+        assertEquals("x_y_z", Strings.CI.replace("xİyİz", "İ", "_", -1));
+        assertEquals("X", Strings.CI.replaceOnce("İ", "İ", "X"));
+    }
+
     @Test
     void testCaseSensitiveConstant() {
         assertNotNull(Strings.CS);

Reply via email to