Ответ 1
Вы не хотите хранить строчную версию строки "для поиска"!
Это совсем не тот подход. Вы делаете несправедливые и неверные предположения о том, как работает Unicode корпус.
Вот почему Unicode определяет отдельную вещь, называемую caseofold для строки, отличную от трех разных случаев (строчные, строчные и прописные).
Вот десять разных примеров , где вы сделаете неправильную вещь, если вы используете строчный регистр вместо casefold:
ORIGINAL CASEFOLD LOWERCASE TITLECASE UPPERCASE
========================================================================
efficient efficient efficient Efficient EFFICIENT
flour flour flour Flour FLOUR
poſt post poſt Poſt POST
poſt post poſt Poſt POST
ſtop stop ſtop Stop STOP
tschüß tschüss tschüß Tschüß TSCHÜSS
weiß weiss weiß Weiß WEISS
WEIẞ weiss weiß Weiß WEIẞ
στιγμας στιγμασ στιγμας Στιγμας ΣΤΙΓΜΑΣ
ᾲ στο διάολο ὰι στο διάολο ᾲ στο διάολο Ὰͅ Στο Διάολο ᾺΙ ΣΤΟ ΔΙΆΟΛΟ
И да, я знаю, что множественное число стигмы - это стигматы, а не стигмы; Я пытаюсь показать окончательный вопрос сигмы. Оба ς и σ являются строчными версиями прописной сигмы Σ. Если вы храните "только строчную букву", тогда вы получите неправильную вещь.
Если вы используете класс Javas Pattern
, вы должны указать как CASE_INSENSITIVE
, так и UNICODE_CASE
, и вы все равно не получите это правильно, потому что, хотя Java использует полное кэширование, он использует только простую фреймворку. Это проблема.
Что касается тюркских языков, да, это правда, что для тюркских есть особый случай. Например, в Стамбуле есть тюркский портфель просто ı̇stanbul вместо i̇stanbul, который вы должны получить. Поскольку я уверен, что они не будут выглядеть правильно, я расскажу вам об именованных символах для не-ASCII; в упрощенном выражении "\N{LATIN CAPITAL LETTER I WITH DOT ABOVE}stanbul"
имеет тюркский регистр из "\N{LATIN SMALL LETTER DOTLESS I}\N{COMBINING DOT ABOVE}stanbul"
, а не "i\N{COMBINING DOT ABOVE}stanbul"
, который вы обычно получаете.
Вот еще несколько строк таблицы, если вы пишете набор регрессионных тестов:
[ "Henry Ⅷ", "henry ⅷ", "henry ⅷ", "Henry Ⅷ", "HENRY Ⅷ", ],
[ "I Work At Ⓚ", "i work at ⓚ", "i work at ⓚ", "I Work At Ⓚ", "I WORK AT Ⓚ", ],
[ "ʀᴀʀᴇ", "ʀᴀʀᴇ", "ʀᴀʀᴇ", "Ʀᴀʀᴇ", "ƦᴀƦᴇ", ],
[ "Ԧԧ", "ԧԧ", "ԧԧ", "Ԧԧ", "ԦԦ", ],
[ "𐐼𐐯𐑅𐐨𐑉𐐯𐐻", "𐐼𐐯𐑅𐐨𐑉𐐯𐐻", "𐐼𐐯𐑅𐐨𐑉𐐯𐐻", "𐐔𐐯𐑅𐐨𐑉𐐯𐐻", "𐐔𐐇𐐝𐐀𐐡𐐇𐐓", ],
[ "Ὰͅ", "ὰι", "ᾲ", "Ὰͅ", "ᾺΙ", ],
Если каждый столбец имеет начало, fold, lc, tc и uc, как и в предыдущей таблице выше. Еще раз обратите внимание на то, как последняя строка имеет caseofold, которая отличается от строчной.