識別子の文字セットがわかっている場合は、そのセットに含まれていないすべてのテキストを簡単に分割できます。たとえば、識別子が単語文字 ( [a-zA-Z_0-9]
) のみで構成されている場合は、次を使用できます。
String[] parts = "on[?a, ?b, ?c]".split("[\\W]+");
String name = parts[0];
String[] vars = Arrays.copyOfRange(parts, 1, parts.length);
識別子に AZ (上と下) しかない場合は、\\W
上記を に置き換えることができます^A-Za-z
。
これは、複雑な正規表現を使用するよりも洗練されているように感じます。
編集:これには、2番目の例が「明確ではない」という問題があることを認識しています。スペースの代わりにアンダースコアなどを使用するオプションがない場合は、次のように、[?
(または部分文字列) を分割して「名前」を取得し、残りを別の分割を行うことができます。
String s = "not clear[?a, ?b, ?c]";
String[] parts = s.split("\\[\\?"); //need the '?' so we don't get an extra empty array element in the next split
String name = parts[0];
String[] vars = parts[1].split("[\\W]+");