選択した範囲のSQLを1行にする。

今のプロジェクトって、SQLをソースに直書きするので、SQL整形を行った後、1行に戻す処理が欲しかったので作りました。
選択した範囲を1行にするので、全選択すればすべてを1行にするし、
気になる部分だけを選択すればそこだけ1行にしてくれます。結構便利。
これをやっているのはSqlUnformatActionクラスです。
コアの処理は以下の通り。

    final JTextPane pane;
    public void actionPerformed(ActionEvent e) {
        String text = pane.getSelectedText();
        StringBuffer sb = new StringBuffer();
        boolean firstSpace = true;  // 最初の空白文字か?(空白文字とはタブや改行を含む)
        boolean firstIndent = true; // 最初のインデントか?先頭のtrimは行わない。
        for (int i=0; i<text.length(); i++) {
            char ch = text.charAt(i);
            if (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r') {
                if (firstIndent || firstSpace) sb.append(' ');
                firstSpace = false;
            } else {
                sb.append(ch);
                firstSpace = true;
                firstIndent = false;
            }
        }       
        pane.replaceSelection(sb.toString());
    }