2

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

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

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

这不会给出预期的结果。

我怎样才能做到这一点?

4

4 回答 4

8

我不确定是否可以使用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);
}
于 2013-11-03T10:35:27.740 回答
2

我知道这是 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-

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

于 2017-10-03T20:22:46.807 回答
1

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

str.split(Pattern.quote("["));
于 2013-11-03T10:27:58.937 回答
-1

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

字符串 [] d = s.split("(\\[)|(\\])");

于 2017-07-11T18:23:20.483 回答