選択した範囲の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()); }