TheLostMindで提案されています。可能な解決策PatternとMatcherを使用することが考えられます。
String s = "[01.02.2016][0][]";
Pattern p = Pattern.compile("(\\[[^\\]]*\\])");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("part = " + m.group());
}
出力
part = [01.02.2016]
part = [0]
part = []
編集Kuzekoで述べたように。周囲のブラケットなしで部品を入手したい場合は、[]
を次のように修正してください。
String s = "[01.02.2016][0][]";
Pattern p = Pattern.compile("\\[([^\\]]*)\\]"); // pattern changed
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("part = " + m.group(1)); // accessed group changed
}
出力
part = 01.02.2016
part = 0
part =
あなたの質問の後半部分には、[編集]。 String.split
が働くように働いていました。使用 -
[\\[(*?)\\]]
次の例を参照してください - 彼らは[...]
String s = "1[2(3*4?5)6]7";
System.out.println(Arrays.toString(s.split("[\\[(*?)\\]]")));
// output
[1, 2, 3, 4, 5, 6, 7]
\\[|\\]
内でグループ化されているので([(*?]
の任意の文字delimitterとして使用 -
String s = "1[2]3";
System.out.println(Arrays.toString(s.split("\\[|\\]")));
// output
[1, 2, 3]
[\\[+\\]]
[
delimitterまたは]
として使用区切り文字のいずれかの文字が(内にグループ化されているため) 210
String s = "1[2[3+4]5";
System.out.println(Arrays.toString(s.split("[\\[+\\]]")));
// output
[1, 2, 3, 4, 5]
結果スレッシュホールドを指定しない場合は、空のフィールドを除外します。これは具体的にどのように機能するか説明については
String s = ",1,2,,,";
System.out.println(Arrays.toString(s.split(",")));
// output
[, 1, 2]
System.out.println(Arrays.toString(s.split(",", 5)));
// output
[, 1, 2, , ,]
String.split(s,int)
が
'のstring.Split(正規表現)' *分割が*区切り文字*に基づいて、文字列を* APIで見て、それが*解析しません*文字列文字列 – TheLostMind
と一致するグループを取得するには 'Pattern'と' Matcher'を使用してください。実際には動作が期待されています。 – TheLostMind