空白で区切るんだけど、"で囲まれている中の空白は無視する
@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
あぁ気になる!誰かもっといい回答をッ!!