我想用SpannableStringjava突出显示一个字符串
我有以下字符串
textString = "2021-01-26 19:23:18 Lat: 26.369919 Long: 83.46433";
由此,我可以使用正则表达式突出显示这个中的字符串
Pattern regex = Pattern.compile("(\d+(?:\.\d+)?)");
像这个
text字符串=">2021-01-2619:23;18纬度:26.369919Long:83.46433";;
但现在我想让s字符串也包括数字之间的":",并希望避免在任何非数字字符之前或之后使用":">
我想产生这样的输出
text字符串=">2021-01-2619:23:18纬度:26.369919经度:83.46433";;
只需将:
包含在可选非捕获组内的角色类中,并使非捕获组匹配0次或更多次:
\d+(?:[:.]\d+)*
RegEx演示
替换为:
"<b>$0</b>"
注意,这将匹配具有多个点的数字,如83.46433.135
。
如果你想消除这种情况,那么使用:
\d+(?:\.\d+|(?::\d+)+)?
RegEx Demo 2
您可以在这里使用Html#fromHtml
来实现一种相当简单的方法:
String textString = "2021-01-26 19:23:18 Lat: 26.369919 Long: 83.46433";
textString = textString.replaceAll("(\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2})", "<b>$1</b>-<b>$2</b>-<b>$3</b> <b>$4</b>");
textString = textString.replaceAll("(?<!\S)(\d+(?:\.\d+)?)(?!\S)", "<b>$1</b>");
textView.setText(Html.fromHtml(textString));
如果在regex替换后记录textString
的值,您将看到以下值:
<b>2021</b>-<b>01</b>-<b>26</b> <b>19:23:18</b> Lat: <b>26.369919</b> Long: <b>83.46433</b>