スネークケースとキャメルケースをお互いに変換する
Javaのサンプルです。
サンプルソース
// スネークケースをキャメルケースに、キャメルをスネークに変換するサンプル
public class SnakeCamelChange {
public static void main(String[] args) {
// 変換対象
String[] ary = new String[] { "snake_case", "camelCase" , "DAOClass" };
for (int i = 0; i < ary.length; i++) {
String str = ary[i];
// スネーク or キャメル判定
// アンダーバーがある = スネークケース
if (str.indexOf("_") < 0) {
// キャメル to スネーク
// 操作しやすいようにStringBufferに変換
StringBuffer sb = new StringBuffer(str);
for (int j = 0; j < sb.length(); j++) {
// 一文字ずつ大文字かどうか判定
char c = sb.charAt(j);
// 大文字の場合
if (Character.isUpperCase(c)) {
char c2 = sb.charAt(j + 1);
if (Character.isUpperCase(c2)) {
// 大文字が連続する場合、小文字に変換するだけ
sb.setCharAt(j, Character.toLowerCase(c));
} else {
// 次の文字も判定
// アンダーバー挿入
sb.insert(j, '_');
// 大文字を小文字に変換
sb.setCharAt(j + 1, Character.toLowerCase(c));
// 挿入した分インデックスを進める
j++;
}
}
}
// 結果を出力
System.out.println("変換結果出力");
System.out.println(str);
System.out.println("↓");
System.out.println(sb.toString());
System.out.println("");
// アンダーバーがない = キャメルケース
} else {
// スネーク to キャメル
// 操作しやすいようにStringBufferに変換 + 小文字に変換
StringBuffer sb = new StringBuffer(str.toLowerCase());
int idx = 0;
// アンダーバーを検索、アンダーバーがなくなったらループ終了
while ((idx = sb.indexOf("_")) > 0) {
// アンダーバーの次の文字を取得
char c = sb.charAt(idx + 1);
// アンダーバーの次の文字を大文字に変換
c = Character.toUpperCase(c);
// アンダーバーの次の文字を大文字に変更
sb.setCharAt(idx + 1, c);
// アンダーバーを削除
sb.deleteCharAt(idx);
}
// 結果を出力
System.out.println("変換結果出力");
System.out.println(str);
System.out.println("↓");
System.out.println(sb.toString());
System.out.println("");
}
}
}
}
実行結果
変換結果出力
snake_case
↓
snakeCase
変換結果出力
camelCase
↓
camel_case
変換結果出力
SNAKECase
↓
snake_case
解説
データベースのカラム名はスネークケース、Javaの変数名はキャメルケースで記述することが多いのですが、職場の
eclipse やエディタには変換機能がなかったので作ってみたサンプルです。
実際にこのサンプルを使う場合は変換結果のみほしいと思われるので、変換結果出力の部分を少々いじってください。同様のサンプルを、正規表現で作成している方がいたのですが、そちらを参考に「DAOClass」を「dao_class」に変換できるように修正しました。
参考
キャメルケース表記を正規表現でアンダースコア区切り表記に変換 - eller's blog
管理人はまだまだ使いこなせていませんが、正規表現ってほんとうに素晴らしいですね。
最終更新:2013年11月17日 03:11