2015-10-14 113 views
2

你好,我做一个程序,可以突出串入的WebView(Android)和我停留在彩色一个替换字符串,这段代码Java字符串,的replaceAll(),但保留情况下,原始字符串

 String[] arr = "LION SAVANA".split(" ");//i split textview string to have words (here we suppose that user entered : "lion savana" 


     String finalText = "the lion is a species of mamifer living into the savana" 

     for (String ss : arr) { 
      if (ss.length() > 2) { 
       ss = ss.replace("*",""); 
       finalText = finalText.replaceAll("(?i)" + ss, "<b style = \"color:#2575ff\";>" + ss + "</b>");//finally here i replace all lion or savana occurrences by blue ones -> but i not keeps case :(
      } 
     } 

这个循环后的文字将“LION是mamifer活到SAVANA的物种”,为蓝色像预期,但用大写的,因为我不希望

+0

请给出一个输入和输出的例子。 –

+0

那真正的问题是什么? – tnw

+0

问题是:用户在textview中输入“FOO”,但用我的代码“Foo”的所有“foo”或“foo”将被替换为“FOO”,并且我想保留原始案例(上,下,或混合) – Noj

回答

4

的代码你提供的你的问题如下:它检查输入字符串不区分大小写"LION""SAVANA",分别用"<b style=\"...\">LION</b>""<b style=\"...\">SAVANA</b>"替换。

如果您想获取原始单词,请使用反向引用,如here。随着使用该反向引用,您的通话replaceAll是这样的:

finalText = finalText.replaceAll("(?i)(" + ss + ")", "<b style = \"color:#2575ff\">$1</b>"); 
+0

谢谢你的人,它的作品也与$ 0,感谢您的帮助 – Noj

+0

@Noj是的,你说得对。 “$ 0”也可以完成这项工作。 – mezzodrinker

+0

ahaha好的,我认为它更好地与第二个括号作比较?对? – Noj

2

好,我找到了如何大一,here

所以最后,我刚刚更换这行:

finalText = finalText.replaceAll("(?i)" + ss, "<b style = \"color:#2575ff\";>" + ss + "</b>"); 

通过

finalText = finalText.replaceAll("(?i)" + ss, "<b style = \"color:#2575ff\";>" +"$0" + "</b>"); 

$ 0显然是我想保留在同一个案例中的词

相关问题