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