2

この形式で表現されたタグを含むテキストがあります: [text other text].

角かっこをセパレータとして使用して文字列を分割したいのですが、これは次のとおりです。

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

これでは期待した結果が得られません。

これどうやってするの?

4

4 に答える 4

8

I'm not sure if one can do this with split(). With pattern finding and [^\\]]+ ("all symbols until the closing bracket") in your pattern this is quite straight-forward:

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() を使用してさらに分割できる「text other text」として返されます。さまざまな種類の (比較的単純な) 文字列操作には StringUtils ライブラリをお勧めします。null 入力などを自動的に処理するので便利です。

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 つのバージョンがあります。

于 2017-10-03T20:22:46.807 に答える
1

以下で説明するように、Pattern.quote("YOUR PATTERN GOES HERE") を使用できます。

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