空白で区切るんだけど、"で囲まれている中の空白は無視する

@kompiroさんのつぶやきに触発されてtryしてみた。

growlnotify -n "Quick JUnit"」をProcessBuilderに食わせるために"growlnotify","-n","Quick JUnit"と分割して上げたいのだけれど、いい方法が見つからない><。もしかしてさくっと出来たりしないのかな。

単純にsplit(" ")すると"growlnotify","-n",""Quick","JUnit""という残念な感じになる。splitの引数は正規表現だけど、うまくクォート文字列を扱う方法は分からなかった。精進がたらんなあ。

さくっとできると思ってtryしたんだけど、さくっとはできなかったです。。
「空白で区切るんだけど、"で囲まれている中の空白は無視する」ってのが正規表現で表現できれば良かったんだけど、難しいですね。分からなかった。
splitの正規表現で一発!とはいかなかったものの、一応出来たので残しておきます。

String target = "growlnotify -n \"Quick JUnit\"";

Matcher m = Pattern.compile("\"(.+)\"|(\\S+)").matcher(target);
while(m.find()) {
    String s = m.group(1) != null ? m.group(1) : m.group(2);
    System.out.println(s);
}

本質は同じだけど、rubyで書くとちょっとすっきりするので、見かけ上ましになった気がするw

matches = 'rowlnotify -n "Quick JUnit"'.scan(/"(.+?)"|(\S+)/)
matches.each do |m|
  puts m[0] || m[1]
end

あぁ気になる!誰かもっといい回答をッ!!