【问题标题】:How to parse a string to get array of #tags out of the string?如何解析字符串以从字符串中获取#tags数组?
【发布时间】:2021-05-08 19:25:15
【问题描述】:

所以我有这样的字符串 "#tag1 #tag2 #tag3 not_tag1 not_tag2 #tag4"(tag2和tag4之间的空格表示可以有多个空格)。从这个字符串中,我只想解析一个 tag1、tag2 等等。它们类似于我们在 LinkedIn 或任何其他社交媒体上看到的#tags。是否有任何简单的方法可以使用正则表达式或 Java 中的任何其他函数来做到这一点。还是我应该用难的方式来做(即使用循环和条件)。

标签格式应为“#”(表示标签开始)和空格“”(表示标签结束)。中间可以有字符或数字,但 start 只能是字符。

例如, 输入:"#tag1 #tag2 #tag3 not_tag1 not_tag2 #12tag #tag4"
输出:["tag1", "tag2", "tag3", "tag4"]

【问题讨论】:

    标签: java arrays string parsing


    【解决方案1】:

    按正则表达式分割:“#\w+”

    编辑:这是正确的正则表达式,但拆分不是正确的方法。

    与 javadev 建议的解决方案相同,但改用:

    String input = "#tag1 #tag2    #tag3 not_tag1 not_tag2 #12tag  #tag4";
    Matcher matcher = Pattern.compile("#\\w+").matcher(input);
    while (matcher.find()) {
        System.out.println(matcher.group(0));
    }
    

    按预期输出#。

    【讨论】:

    • 如果你没有测试,不够确定,只是猜测,请不要发布它作为答案。
    • 它正在工作,但#12tag,也被选中。我对正则表达式了解不多,对此感到抱歉。
    • 啊,我发布答案后要求改变了。
    【解决方案2】:

    可能是这样的:

    public static void main(String[] args ) {
        String input = "#tag1 #tag2    #tag3 not_tag1 not_tag2 #12tag  #tag4";
        Pattern pattern = Pattern.compile("#([A-z][A-z0-9]*) *");
    
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }
    

    为我工作:)

    输出: 标签1 标签2 标签3 标签4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多