Я выделяю текст в текстовых представлениях после поиска и замены этим кодом.
txtV.setText(Html.fromHtml((text.replaceAll("(?i)"
+ searchText,"<font color='#53f721'>" + searchText + "</font>")));
Но все символы верхнего регистра заменяются строчными. Я хочу, чтобы прописные буквы были заменены на прописные, а строчные - на строчные.
Заранее спасибо.
На самом деле вы заменяете исходный текст на searchText
, а использование функции замены (?i)
работает без учета регистра.
Если я хочу сделать это, я предпочитаю использовать SpannableString, как показано ниже:
String originalText = "Your original text";
Spannable wordToSpan = new SpannableString(originalText);
originalText = originalText.toLowerCase();
searchText = searchText.toLowerCase();
int length = searchText.length();
int index = originalText.indexOf(searchText);
while (index >= 0) {
wordToSpan.setSpan(new ForegroundColorSpan(Color.BLUE), index, index + length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
index = originalText.toLowerCase().indexOf(searchText, index + length);
}
txtV.setText(wordToSpan);
Спасибо @Mir Milad Hosseiny
Вы можете использовать возможности регулярных выражений следующим образом:
txtV.setText(Html.fromHtml((text.replaceAll("(?i)"
+ searchText,"<font color='#53f721'>$0</font>")));
Пожалуйста, добавьте четкую постановку проблемы к вашему вопросу. Кроме того, я сомневаюсь в вашем описании текущего поведения. Возможно, также добавьте некоторые образцы данных.