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);