文字列を行ごとに区切って配列に格納するために、java.lang.String#split() を次のようにして使ったのですが、

String str = "foo\nbar\nbaz\n";
String[] lines = str.split("$");

うまく行ごとに分割されず、次のような結果になりました。

lines[0] //=> "foo\nbar\nbaz\n"
lines[1] //=> ""

"$" のかわりに "\n" を使うと分割はされるのですが、改行文字が消えてしまいます。
改行文字を消さないために、できれば "$" を使いたいのですが、どうしたらうまくいくでしょうか。