【问题标题】:Highlight IP address in string [duplicate]突出显示字符串中的 IP 地址 [重复]
【发布时间】:2016-05-30 19:22:54
【问题描述】:

假设我有以下字符串User 192.168.46.3 connected to this AP。我想用<font color='red'>"+192.168.46.3+"</font> 替换其中的IP 地址,这样我就可以更改它的颜色。实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: java android string


    【解决方案1】:

    如果您不太关心验证 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>")
    

    【讨论】:

      【解决方案2】:

      这是基于蒂姆回答的完整代码:

      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);
      

      【讨论】:

        【解决方案3】:

        您可以使用Pattern.javaMatcher.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 来设置文本视图的文本。

        【讨论】:

          猜你喜欢
          • 2012-11-27
          • 2012-09-02
          • 2020-11-22
          • 1970-01-01
          • 2019-05-13
          • 2022-01-01
          • 2015-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多