Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/main/java/org/apache/commons/text/TextStringBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -1908,8 +1908,12 @@ public boolean equalsIgnoreCase(final TextStringBuilder 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;
Expand Down
10 changes: 10 additions & 0 deletions src/test/java/org/apache/commons/text/TextStringBuilderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -974,6 +974,16 @@ void testEqualsIgnoreCase() {
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))));
Expand Down
Loading