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 ddaad175 Match String case folding in 
TextStringBuilder.equalsIgnoreCase (#762)
ddaad175 is described below

commit ddaad175af54fd19f47015c87357052af0618040
Author: alhuda <[email protected]>
AuthorDate: Sat Jul 11 20:36:48 2026 +0530

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

diff --git a/src/main/java/org/apache/commons/text/TextStringBuilder.java 
b/src/main/java/org/apache/commons/text/TextStringBuilder.java
index a3997bff..64baa303 100644
--- a/src/main/java/org/apache/commons/text/TextStringBuilder.java
+++ b/src/main/java/org/apache/commons/text/TextStringBuilder.java
@@ -1908,8 +1908,12 @@ public class TextStringBuilder implements CharSequence, 
Appendable, Serializable
         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/text/TextStringBuilderTest.java 
b/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
index 3aafdb0d..e2c74cbc 100644
--- a/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
+++ b/src/test/java/org/apache/commons/text/TextStringBuilderTest.java
@@ -974,6 +974,16 @@ class TextStringBuilderTest {
         sb2.set("aBc");
         assertTrue(sb1.equalsIgnoreCase(sb2));
 
+        // characters that only fold together via toLowerCase, matching 
String.equalsIgnoreCase
+        sb1.set("\u004B"); // LATIN CAPITAL LETTER K
+        sb2.set("\u212A"); // KELVIN SIGN, lower-cases to 'k'
+        assertTrue(sb1.equalsIgnoreCase(sb2));
+        assertTrue(sb2.equalsIgnoreCase(sb1));
+
+        sb1.set("\u00E5"); // LATIN SMALL LETTER A WITH RING ABOVE
+        sb2.set("\u212B"); // ANGSTROM SIGN, lower-cases to the same
+        assertTrue(sb1.equalsIgnoreCase(sb2));
+
         final Locale turkish = Locale.forLanguageTag("tr");
         assertTrue(new TextStringBuilder("title").equalsIgnoreCase(new 
TextStringBuilder("title".toLowerCase(turkish))));
         assertTrue(new TextStringBuilder("title").equalsIgnoreCase(new 
TextStringBuilder("TITLE".toLowerCase(turkish))));

Reply via email to