Как игнорировать регистр символов, которые будут выделены при поиске в строимых строках? - PullRequest
1 голос
/ 17 октября 2019

Я реализовал механизм поиска в своем приложении так, что при фильтрации по именам в списке он выделяет совпадающие имена, и проблема заключается только в том, что он выделяет только строчные буквы и не выделяет слова, которыенаходятся в верхнем регистре или сопровождаются заглавными буквами.

Вот мой код для выделения искомых символов:

if(! searchText.isEmpty()) {
                if(guest.getGuestFirstName().contains(searchText)){
                    int startPos = guest.getGuestFirstName().indexOf(searchText.toLowerCase(Locale.US));
                    int endPos = startPos + searchText.length();

                    if (startPos != -1) // This should always be true, just a sanity check
                    {
                        Spannable spannable = new SpannableString(guest.getGuestFirstName());
                        Typeface firstNameFont = Typeface.createFromAsset(context.getAssets(), "fonts/Graphik-Semibold.otf");
                        spannable.setSpan(new CustomTypefaceSpan("", firstNameFont), startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        guestFirstName.setText(spannable);
                    }
                } else {
                    Objects.requireNonNull(guestFirstName).setText(guest.getGuestFirstName());

                }

Теперь, если я ищу «an», будет выделяться «an»символы в «angela heely», но если я буду искать «An», он не будет выделять какие-либо символы вообще или наоборот, скажем, если «Angela Heely» начинается с заглавной буквы, а я ищу с «an», это не будетвыделите «An». Это может быть что-то простое, что я пропускаю, но любая помощь или идеи будут полезны, чтобы сделать нечувствительным к регистру выделение искомого текста.

Открыт для любых выражений регулярных выражений. Прямо сейчас строка searchtext, возвращает то, что пользователь искал независимо от регистра. сказать "ангела", "ан" и т. д.

спасибо !!

1 Ответ

1 голос
/ 17 октября 2019

Ваша проблема с содержимым в этой строке:

 if(guest.getGuestFirstName().contains(searchText)){

Содержит регистр, поэтому «an» и «An» не совпадают. измените это на:

 if(guest.getGuestFirstName().toLowerCase().contains(searchText.toLowerCase())){

Также измените это:

int startPos = guest.getGuestFirstName().indexOf(searchText.toLowerCase(Locale.US));

на это (по той же причине):

int startPos = guest.getGuestFirstName().toLowerCase().indexOf(searchText.toLowerCase());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...