在可跨越的字符串中搜索时,如何忽略要突出显示的字符的大小写?
How do I ignore case for characters to be highligted while searching in spannable strings?
我在我的应用程序中实施了一种搜索机制,这样当您过滤列表中的名称时,它会突出显示匹配的名称,唯一的问题是它只突出显示小写字母而不突出显示任何大写或后跟大写字母的单词。
这是我用来突出显示搜索到的字符的代码:
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" 中的任何字符全部或反之亦然,假设 "Angela Heely" 以大写字母开头,我用 "an" 搜索,它不会突出显示“An”。可能是我遗漏的一些简单的东西,但任何帮助或想法都将不胜感激,以使其不区分大小写以突出显示搜索到的文本。
也对任何正则表达式开放。现在搜索文本字符串,returns 用户搜索的任何内容,不分大小写。说“安吉拉”,"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());
我在我的应用程序中实施了一种搜索机制,这样当您过滤列表中的名称时,它会突出显示匹配的名称,唯一的问题是它只突出显示小写字母而不突出显示任何大写或后跟大写字母的单词。
这是我用来突出显示搜索到的字符的代码:
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" 中的任何字符全部或反之亦然,假设 "Angela Heely" 以大写字母开头,我用 "an" 搜索,它不会突出显示“An”。可能是我遗漏的一些简单的东西,但任何帮助或想法都将不胜感激,以使其不区分大小写以突出显示搜索到的文本。
也对任何正则表达式开放。现在搜索文本字符串,returns 用户搜索的任何内容,不分大小写。说“安吉拉”,"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());