文字列をキャメルケースに変換する

■キャメルケースとは?

英語の単語を連結する際、そのまま連結すると分かりにくいため、2つ目の単語の先頭文字を
大文字にして連結する命名規則です。

詳しくは、wikiをご参照ください。

■キャメルケース変換フロー

キャメルケースに変換する際、大きく2つの処理が必要です。

  1. 単語を先頭の文字列を大文字に、残りを小文字に変換する(capitalize)
  2. 単語をデリミタに区切ってキャメルケースにする(toCamelCase)

■capitalize処理

全ての文字列を小文字や小文字に変換する処理はデフォルトでメソッドが用意されていますが、
先頭文字を大文字にし残りを小文字にする変換するメソッドがなかったので、自作しました。
(Progressionでは用意されているみたいですね。)

public static function capitalize(text:String):String
{
  if (text == null || text.length == 0) return "";
  if (text.length == 1) {
    return text.toUpperCase();
  } else {
    return text.substr(0, 1).toUpperCase() + text.substring(1).toLowerCase();
  }
}

■キャメルケースへの変換

キャメルケースへの変換は、変換対象の文字列に対して指定されたデリミタで区切り、
2つ目以降の各単語に対してcapitalize処理を行い、連結して返します。


public static function toCamelCase(text:String, delimiter:String="-"):String
{
if (text == null || text.length == 0) return "";
if (delimiter == null || delimiter.length == 0) return text;
if (text.indexOf(delimiter) > 0) {
var tokens:Array = text.split(delimiter);
var camelCase:String = tokens[0];
for (var i:uint = 1; i < tokens.length; i++) {
var token:String = tokens[i];
camelCase += token.substr(0, 1).toUpperCase() + token.substring(1).toLowerCase();
}
return camelCase;
}
return text;
}

全ソースとユニットテストコードですので、よければお使いください。

ソース

package
{
  public class StringUtils
  {
    /**
     * 先頭文字を大文字に、2文字目以降を小文字に変換する。
     */
    public static function capitalize(text:String):String
    {
      if (text == null || text.length == 0) return "";
      if (text.length == 1) {
        return text.toUpperCase();
      } else {
        return text.substr(0, 1).toUpperCase() + text.substring(1).toLowerCase();
      }
    }

    /**
     * 文字列をキャメルケースに変換する。
     */
    public static function toCamelCase(text:String, delimiter:String="-"):String
    {
      if (text == null || text.length == 0) return "";
      if (delimiter == null || delimiter.length == 0) return text;
      if (text.indexOf(delimiter) > 0) {
        var tokens:Array = text.split(delimiter);
        var camelCase:String = tokens[0];
        for (var i:uint = 1; i < tokens.length; i++) {
          var token:String = tokens[i];
          camelCase += token.substr(0, 1).toUpperCase() + token.substring(1).toLowerCase();
        }
        return camelCase;
      }
      return text;
    }

  }
}

テストコード

package jp.co.savaway.powerdo.downloader.util
{
  import flexunit.framework.TestCase;

  public class StringUtilsTest extends TestCase
  {
    /**
     * 先頭文字を大文字に、2文字目以降を小文字に変換するテスト
     */
    public function testCapitalize():void {
      assertEquals("A", StringUtils.capitalize("a"));
      assertEquals("A", StringUtils.capitalize("A"));
      assertEquals("", StringUtils.capitalize(null));
      assertEquals("", StringUtils.capitalize(""));
      assertEquals("Abc", StringUtils.capitalize("abc"));
    }

    /**
     * キャメルケースに変換するテスト
     */
    public function testToCamelCase():void {
      assertEquals("hogeHoge", StringUtils.toCamelCase("hoge-hoge", "-"));
      assertEquals("hogeHogeHoge", StringUtils.toCamelCase("hoge hoge hoge", " "));
      assertEquals("hogehoge", StringUtils.toCamelCase("hogehoge", ""));
      assertEquals("", StringUtils.toCamelCase("", "-"));
      assertEquals("", StringUtils.toCamelCase(null, "-"));
      assertEquals("aaa", StringUtils.toCamelCase("aaa", ""));
    }


  }
}