この形式で表現されたタグを含むテキストがあります: [text other text]
.
角かっこをセパレータとして使用して文字列を分割したいのですが、これは次のとおりです。
String.split("\\[|\\]");
これでは期待した結果が得られません。
これどうやってするの?
この形式で表現されたタグを含むテキストがあります: [text other text]
.
角かっこをセパレータとして使用して文字列を分割したいのですが、これは次のとおりです。
String.split("\\[|\\]");
これでは期待した結果が得られません。
これどうやってするの?
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);
}
これが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 つのバージョンがあります。
以下で説明するように、Pattern.quote("YOUR PATTERN GOES HERE") を使用できます。
str.split(Pattern.quote("["));