在保留原始案例的同时突出显示ListView中的搜索词

时间:2012-10-27 19:14:02

标签: android regex

我有一个ListView和一个search_term。我想在ListView中突出显示(通过着色红色)search_term的所有实例。这很有效。

text = text.replaceAll(search_term, "<font color='red'>$1</font>");

我现在正试图让它在一个敏感庄园的案例中发挥作用。 我认为以下是正确的,但它不起作用。

text = text.replaceAll("(?i)" + search_term, "<font color='red'>$1</font>");

所以基本上我想用红色为search_term的所有实例着色,我想在匹配时忽略大小写,但在着色时不要忽略。

以下是3个例子。 search_term是“apple”,粗体表示红色。

“苹果是红色的” - &gt; “苹果是红色的”

“Apple是红色的” - &gt; “ Apple 是红色的”

“APPLE是红色的” - &gt; “ APPLE 是红色的”

亲切的问候, 卡瑟尔

2 个答案:

答案 0 :(得分:1)

search_term应该在()之类的圆括号中,它描绘了group ..

因此,对于apple,您的search_term应为

search_term="(apple)";

这将在$1

中捕获

您可以在不使用$0

的情况下使用()

注意

$0 - &gt;是完整匹配

$1 - &gt;第一个()

$2 - &gt;第二个()

答案 1 :(得分:0)

我认为(?i)不适用于String.replaceAll。如果您使用PatternMatcher,则应该可以使用。

Pattern pattern = Pattern.compile( search_term, Pattern.CASE_INSENSITIVE );
Matcher matcher = pattern.matcher( text );
text = matcher.replaceAll( "\0" );

我不是100%确定我在replaceAll中有正确的字符串,但这是一般的想法。