java - 在可跨越的字符串中搜索时,如何忽略要突出显示的字符的大小写?

标签 java android android-adapter android-search android-typeface

我在我的应用程序中实现了一种搜索机制,这样当您过滤列表中的名称时,它会突出显示匹配的名称,唯一的问题是它只突出显示小写字母而不突出显示匹配的任何单词大写或后跟大写字母。

这是我用来突出显示搜索到的字符的代码:

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”,它会突出显示“angela heely”中的“an”字符,但如果我搜索“An”,它根本不会突出显示任何字符,反之亦然,比如“Angela” Heely”以大写字母开头,我用“an”搜索,它不会突出显示“An”。可能是我遗漏的一些简单的东西,但任何帮助或想法都将不胜感激,以使其不区分大小写以突出显示搜索到的文本。

也对任何正则表达式开放。现在 searchtext 字符串,无论大小写都会返回用户搜索的任何内容。说“angela”、“an”等

谢谢!!

最佳答案

您的问题在于该行中的包含:

 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());

关于java - 在可跨越的字符串中搜索时,如何忽略要突出显示的字符的大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58436475/

相关文章:

java - Clojure 中函数的类型提示

java - 在我的应用程序中出现错误 "java.lang.RuntimeException: Unable to start activity"

android - 为什么我可以通过 Bundle 传递带有位图的可序列化对象,但当系统尝试序列化它时却出现错误?

java - 重写notifyDataSetChanged()不起作用

android - notifyDataSetChanged() 不适用于我的自定义适配器

java - JTextArea位置,setBounds不起作用?

java - 当我从 Android Studio 在 Android 手机上运行应用程序时,它显示空白屏幕

android - Android 上的虚拟蓝牙设备?

android - R.java 被删除

android - android中viewpager的加载顺序