2013-05-24 3 views
0

У меня есть EditText для поиска searchKeyword внутри абзаца (параграф находится внутри базы данных SQLite).как загорать слова в любом случае (в верхнем регистре, в нижнем регистре частично или полностью)?

String Contentstr = paragraph.replaceAll(searchKeyword,"<font color=\"red\">" + searchKeyword + "</font>"); 
txtV.setText(Html.fromHtml(Contentstr)); 

выше кода HIGHTLIGHTS так:

Когда я искал "Привет привет" (searchKeyword = "Hi hi "), база данных функция поиска возврата ANYCASE буквы (я имею в виду," hI hi "или" HI HI" и т. д.), он затягивает «Hi hi», но заменяет все остальные «hI HI», «hI hi», .. и т. д. в searchKeyword = «Hi hi».
Я не хочу так менять.
Когда я ищу «Hi hi», он должен загореться «Hi hi» и другие «hI hi» или «HI HI», не заменяя других на «Hi hi».

ответ

0

Если вы хотите, чтобы ваше регулярное выражение не учитывало регистр, добавьте (?i) в начале его. Также вы можете использовать соответствующую партию взамен, используя $index, где index - это индекс соответствия group.

Таким образом, используя эту информацию, вы можете попробовать что-то вроде

String Contentstr = paragraph.replaceAll("(?i)"+searchKeyword, 
         "<font color=\"red\">$0</font>"); 

Кроме того, в случае, если Ваше searchKeyword содержит некоторые special characters обернуть его Pattern.quote() производить регулярное выражение, которое будет автоматически избежать специального значения этих символов

String Contentstr = paragraph.replaceAll("(?i)"+Pattern.quote(searchKeyword), 
         "<font color=\"red\">$0</font>"); 
+0

Что такое $ 0? Что это значит? –

+0

@DentalBoom '$ 0' представляет строку, найденную вашим регулярным выражением. 0 - индекс [group] (http://www.regular-expressions.info/brackets.html) 0, который представляет собой полное совпадение. – Pshemo

+0

Спасибо вам большое. Сир ...... я не могу проголосовать за bcoz. У меня низкая репутация извините за это ...^_ ^ –

Смежные вопросы