android - 基于不区分大小写的搜索在替换时保留文本大小写?

标签 android replace textview

在我的应用程序中,我有一个带有一些文本的 Textview。我正在尝试从用户那里获取输入,然后根据该输入在 Textview 中突出显示单词。

例如如果文本是

Hello stackoverflow

用户的输入是

hello

我想将文本替换为:

<font color='red'>Hello</font>` stackoverflow 

这是我的代码:

String input = //GETTING INPUT FROM THE USER
text= text.replaceAll(input,"<font color='red'>"+input+"</font>");
Textview.setText(Html.fromHtml(text));

替换工作正常,但问题是我当前的代码更改了原始单词大小写,例如:

文本: HeLLo stackoverflow

输入:你好

我得到了什么: <font color='red'>hello</font>计算器

我想要什么: <font color='red'>HeLLo</font>计算器

最佳答案

你必须考虑正则表达式。

replaceAll允许您使用正则表达式,因此,您可以替换找到的确切匹配项的文本。 例如,如果找到 Hello,它将替换为 <font color='red'>Hello</font> . 如果找到 HeLLo,它将替换为 <font color='red'>HeLLo</font>

您的代码应该像下面这样简单:

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

这意味着:

  • (?i) : 我想搜索一些东西,不区分大小写
  • "("+input+")" : 输入介于 ( 之间和 )因为我们正在创建一个群,所以这个群可以稍后引用
  • "<font color='red'>$1</font>" : 而不是用输入替换,这会改变大小写,我们用 `$1 替换它,这是对第一个匹配组的引用。这意味着我们要使用找到的确切词替换它。

但是请尝试并继续玩,因为正则表达式很棘手。

其他读物

如果使用 Pattern 会更容易、更清楚类。

您可以在这里阅读更多内容:

http://developer.android.com/reference/java/util/regex/Pattern.html

此外,您还可以看看如何操作: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29

public String replaceAll(String regex,  String replacement)

. 用给定的替换替换此字符串中与给定正则表达式匹配的每个子字符串。 调用这种形式为 str.replaceAll(regex, repl) 的方法会产生与表达式完全相同的结果

Pattern.compile(regex).matcher(str).replaceAll(repl)

请注意,替换字符串中的反斜杠 () 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同;请参阅 Matcher.replaceAll。如果需要,使用 Matcher.quoteReplacement(java.lang.String) 来抑制这些字符的特殊含义。

Parameters:
regex - the regular expression to which this string is to be matched
replacement - the string to be substituted for each match
Returns:
The resulting String

更新

您可以在此页面中测试您的正则表达式:

http://www.regexplanet.com/advanced/java/index.html

关于android - 基于不区分大小写的搜索在替换时保留文本大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392770/

相关文章:

android - 在 Codename One 模拟器中测试应用内购买导致空指针异常

android - Android中如何限制mp3文件在其他应用程序中播放

linux - 如何更改目录中所有文件中所有出现的单词

android - 如何在 Android 上使背景透明 20%

android - 如何在 Android 中设置 String[] 的 TextView ?

android - 使用 openFileOutput 时文件保存在哪里?

java - 想要在第二次单击时更改网格的颜色

c++ - 如何删除 QString 的前两个字符

javascript - 使用 JavaScript 替换动态字符串值

android - 如何将图像放在 TextView 中的文本下方