【发布时间】:2016-05-30 19:22:54
【问题描述】:
假设我有以下字符串User 192.168.46.3 connected to this AP。我想用<font color='red'>"+192.168.46.3+"</font> 替换其中的IP 地址,这样我就可以更改它的颜色。实现这一目标的最佳方法是什么?
【问题讨论】:
假设我有以下字符串User 192.168.46.3 connected to this AP。我想用<font color='red'>"+192.168.46.3+"</font> 替换其中的IP 地址,这样我就可以更改它的颜色。实现这一目标的最佳方法是什么?
【问题讨论】:
如果您不太关心验证 IP,一个简单的正则表达式就可以解决问题。
获取 java.util.regex.Pattern 和 .Matcher 并使用类似
([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})
替换要替换的组。
像这样:
final Pattern p = new Pattern("([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})")
final Matcher m = p.match("User 192.168.46.3 connected to this AP")
final String s = m.replaceAll("<font color='red'>$1</font>")
【讨论】:
这是基于蒂姆回答的完整代码:
String input = "User 192.168.46.3 connected to this AP";
String regex = "([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})";
String output = input.replaceAll(regex, "<font color='red'>$0</font>");
System.out.println(output);
【讨论】:
您可以使用Pattern.java 和Matcher.java 类来检测字符串中的IP 地址。
查看Pattern.java 文档,有一个关于如何正确使用它们的示例。 然后,您可以遍历匹配器结果并将 ForegroundColorSpan 应用于每个结果。
SpannableString spannable = new SpannableString(YOUR_STRING_CONTAINING_AN_IP_ADDRESS);
Pattern p = Pattern.compile(YOUR_REGEX);
Matcher m = p.matcher(YOUR_STRING_CONTAINING_AN_IP_ADDRESS);
while(m.find()) {
spannable.setSpan(new ForegroundColorSpan(COLOR_YOUR_WANT), m.start(), m.end()-1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}
然后您可以使用 spannable 来设置文本视图的文本。
【讨论】: