【问题标题】:How to extract text between square brackets with String.split如何使用 String.split 提取方括号之间的文本
【发布时间】:2013-11-03 10:20:53
【问题描述】:

我的文本包含以这种格式表示的标签:[text other text]

我想用方括号作为分隔符来分割字符串,但是这个:

String.split("\\[|\\]");

这并没有给出预期的结果。

我该怎么做?

【问题讨论】:

  • 哪个输入,你期望得到什么样的结果,你会得到什么样的结果?
  • 也请分享您的意见。
  • 如果您对 [方括号之间的值] 感兴趣,最好使用正则表达式和组匹配器。

标签: java text-parsing


【解决方案1】:

我知道这是 4 年前提出的,但对于任何有相同/相似问题的人(就像我一样),有比使用正则表达式更简单的东西:

String result = StringUtils.substringBetween(str, "[", "]");

在您的示例中,result 将作为“文本其他文本”返回,如果需要,您可以使用 StringUtils.split() 进一步拆分。我会推荐 StringUtils 库用于各种(相对简单的)字符串操作;它会自动处理空输入之类的事情,这很方便。

substringBetween() 的文档: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substringBetween-java.lang.String-java.lang.String-java.lang.String-

这个函数还有另外两个版本,取决于开始和结束分隔符是否相同,以及分隔符是否在目标字符串中出现多次。

【讨论】:

    【解决方案2】:

    我不确定split() 是否可以做到这一点。在您的模式中使用模式查找和[^\\]]+(“所有符号直到右括号”),这非常简单:

    public static void main(String[] args) {
        String line = "xx [text other text], [jili u babusi dva veselikh gusya], " +
            "[a granny there was having two gay gooses] zz";
    
        Matcher matcher = Pattern.compile("\\[([^\\]]+)").matcher(line);
    
        List<String> tags = new ArrayList<>();
    
        int pos = -1;
        while (matcher.find(pos+1)){
            pos = matcher.start();
            tags.add(matcher.group(1));
        }
    
        System.out.println(tags);
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用拆分方法并将答案放入数组中

      String [] d = s.split("(\\[)|(\\])");

      【讨论】:

      • 试着解释你的代码,而不是不说为什么就写出来
      【解决方案4】:

      您可以使用 Pattern.quote("YOUR PATTERN GOES HERE"),如下所述,

      str.split(Pattern.quote("["));
      

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 2014-08-07
        • 2011-01-25
        • 1970-01-01
        • 2021-05-25
        • 2011-01-25
        相关资源
        最近更新 更多