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 7c91ce989 Match String case folding in StrBuilder.equalsIgnoreCase 
(#1745)
7c91ce989 is described below

commit 7c91ce9898e2bfe0eb938ed16d4e1b8840d39aef
Author: alhuda <[email protected]>
AuthorDate: Sat Jul 11 17:59:36 2026 +0530

    Match String case folding in StrBuilder.equalsIgnoreCase (#1745)
---
 src/main/java/org/apache/commons/lang3/text/StrBuilder.java    |  8 ++++++--
 .../java/org/apache/commons/lang3/text/StrBuilderTest.java     | 10 ++++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

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 13bdb64f0..97456ef82 100644
--- a/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
+++ b/src/main/java/org/apache/commons/lang3/text/StrBuilder.java
@@ -1912,8 +1912,12 @@ public boolean equalsIgnoreCase(final StrBuilder other) {
         for (int i = size - 1; i >= 0; i--) {
             final char c1 = thisBuf[i];
             final char c2 = otherBuf[i];
-            if (c1 != c2 && Character.toUpperCase(c1) != 
Character.toUpperCase(c2)) {
-                return false;
+            if (c1 != c2) {
+                final char u1 = Character.toUpperCase(c1);
+                final char u2 = Character.toUpperCase(c2);
+                if (u1 != u2 && Character.toLowerCase(u1) != 
Character.toLowerCase(u2)) {
+                    return false;
+                }
             }
         }
         return true;
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 3a711c6b4..2381019de 100644
--- a/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
+++ b/src/test/java/org/apache/commons/lang3/text/StrBuilderTest.java
@@ -698,6 +698,16 @@ void testEqualsIgnoreCase() {
 
         sb2.clear().append("aBc");
         assertTrue(sb1.equalsIgnoreCase(sb2));
+
+        // characters that only fold together via toLowerCase, matching 
String.equalsIgnoreCase
+        sb1.clear().append("\u004B"); // LATIN CAPITAL LETTER K
+        sb2.clear().append("\u212A"); // KELVIN SIGN, lower-cases to 'k'
+        assertTrue(sb1.equalsIgnoreCase(sb2));
+        assertTrue(sb2.equalsIgnoreCase(sb1));
+
+        sb1.clear().append("\u00E5"); // LATIN SMALL LETTER A WITH RING ABOVE
+        sb2.clear().append("\u212B"); // ANGSTROM SIGN, lower-cases to the same
+        assertTrue(sb1.equalsIgnoreCase(sb2));
     }
 
     @Test

Reply via email to