jam*_*mes 1 android replace textview
在我的应用程序中,我有一些带有文本的Textview.我正在尝试从用户那里获得输入,然后根据该输入突出显示Textview中的单词.
例如,如果文本是
Hello stackoverflow
并且用户的输入是
你好
我想用以下内容替换文本:
<font color='red'>Hello</font>` stackoverflow
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
String input = //GETTING INPUT FROM THE USER
text= text.replaceAll(input,"<font color='red'>"+input+"</font>");
Textview.setText(Html.fromHtml(text));
Run Code Online (Sandbox Code Playgroud)
替换工作正常,但问题是我当前的代码更改了原始单词的情况,例如:
文本: HeLLo stackoverflow
输入:你好
我得到的: <font color='red'>hello</font> stackoverflow
我想要的: <font color='red'>HeLLo</font> stackoverflow
你必须考虑正则表达式.
replaceAll允许您使用正则表达式,因此,您可以替换找到的确切事件的文本.例如,如果找到Hello,则将其替换为<font color='red'>Hello</font>.如果找到HeLLo,它将替换它<font color='red'>HeLLo</font>
您的代码应该像以下一样简单:
String highlighted = text.replaceAll("(?i)("+input+")","<font color='red'>$1</font>");
Run Code Online (Sandbox Code Playgroud)
这意味着:
(?i) :我想搜索一些不区分大小写的东西"("+input+")":输入悫(和),因为我们正在创建一个组,所以这个组以后可以refered"<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)
Run Code Online (Sandbox Code Playgroud)
.将给定替换的给定正则表达式匹配的此字符串的每个子字符串替换.调用str.replaceAll(regex,repl)形式的此方法会产生与表达式完全相同的结果
Pattern.compile(regex).matcher(str).replaceAll(repl)
Run Code Online (Sandbox Code Playgroud)
请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同; 见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
Run Code Online (Sandbox Code Playgroud)
UPDATE
您可以在此页面中测试正则表达式:
http://www.regexplanet.com/advanced/java/index.html
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |