ActionScript 3.0で始めるオブジェクト指向スクリプティング

第8回 Stringクラスによる文字列の操作と値を返す関数

この記事を読むのに必要な時間:およそ 4 分

前回の第7回は,Dateクラスを使って日付を調べ,アナログ時計のTextFieldに表示させた。今回は,Stringクラスにより文字列を操作して,日付のフォーマットに手を加え,その処理を関数としてまとめてみたい。

Stringクラスを使った文字列の一部取出し

第7回のアナログ時計に表示した日付は,年月日の数字にスラッシュ(/)を挟んで,単純に連結したものだった図1)。これを数字2桁に揃えた「YY/MM/DD」というフォーマットにしてみよう。まずは,年の値だ。

図1 年月日にスラッシュ(/)を挟んで単純に連結

図1 年月日にスラッシュ(/)を挟んで単純に連結

文字列の操作には,Stringクラスが利用できる。Stringクラスも,Dateクラスと同じように,インスタンスをターゲットにして,プロパティやメソッドを操作する。しかし,new演算子でインスタンスを作成しなくても,ダブルクォーテーション(")で括って記述した文字列は,そのままStringクラスのインスタンスとして扱える※1)。

※1)
new演算子を使って,以下のようにStringインスタンスを作成することも可能だ。しかし,このような記述を用いる必要性は,とくにない。
var year_str:String = new String("2007");

たとえば,文字列の文字数はString.lengthプロパティで調べることができる※2)。つぎのスクリプトは,文字列の数字"2007"を変数year_strに格納し,その文字数4を[出力]パネルに表示する。

var year_str:String = "2007";
trace(year_str.length);   // 出力: 4
※2)
Stringクラスのlengthプロパティを,ヘルプなどのドキュメントではString.lenghtのように「クラス名.プロパティ名」のかたちで示す。また,メソッドも同様に「クラス名.メソッド名」のように記載する。

文字列から文字の一部を取出すには,String.substring()メソッドを用いる。引数は文字位置を指定するインデックス番号で,開始位置と終了位置のふたつだ。なお,インデックス番号は,0から始まる。たとえば,文字列の数字"2007"から末尾の2桁"07"を取出すには,つぎのようにString.substring()メソッドの第1引数に2,第2引数に4を指定する。

var year_str:String = "2007";
trace(year_str.substring(2, 4));   // 出力: 07

文字列のインデックス番号は0から始めるので,第1引数の2は(3文字目なので)よいとして,第2引数の4がわかりにくいかと思う。これはヘルプを見ると,第2引数は「抽出するサブストリングの最後の文字のインデックスに1を加えた整数」とされているからである。

文字そのものを数えるより,文字の間に仕切を想い浮かべると理解しやすいだろう図2)。そして,取出したい文字列が,どの仕切からどの仕切の間にあるのかを数えればよい。文字列"2007"の末尾の2桁"07"は,仕切番号2から4の間の文字ということになる。

図2 文字の間に仕切を想い浮かべる

図2 文字の間に仕切を想い浮かべる

すると,ターゲットとなる文字列の,ある文字から最後の文字まで取出したいとき,第2引数はString.lengthプロパティの値と一致することがわかる。したがって,上記スクリプトでString.substring()メソッドメソッドの第2引数を書替えて,year_str.substring(2, year_str.length)と記述しても同じ結果が得られる。

さらにヘルプを確認すると,第2「パラメータを省略すると,String.lengthが使用され」るとある。つまり,文字列の末尾2桁を取得したい場合には,第2引数は省略できる。前回作成したスクリプト2に修正を加えて※3),年を2桁で表示するようにしてみようスクリプト1)。

スクリプト1 年の下2桁を取出して日付表示する

function xSetTime(eventObject:Event):void {
  // [1]Dateインスタンスから時刻と日付のプロパティ値を取得する
  var my_date:Date = new Date();
  var nSeconds:Number = my_date.seconds;
  var nMinutes:Number = my_date.minutes;
  var nHours:Number = my_date.hours;
  var nYear:Number = my_date.fullYear;
  var nMonth:Number = my_date.month+1;
  var nDate:Number = my_date.date;
  // [2]時計の針のアニメーション
  second_mc.rotation = nSeconds*6;
  minute_mc.rotation = nMinutes*6;
  hour_mc.rotation = nHours*30+nMinutes/2;
  // [3]日付のフォーマットを設定
  var year_str:String = String(nYear).substring(2); // 第2引数を省略
  // [4]日付をTextFieldインスタンスに設定
  my_txt.text = year_str+"/"+String(nMonth)+"/"+String(nDate);
}
addEventListener(Event.ENTER_FRAME, xSetTime);
※3)
前回作成したサンプルファイルは,第7回「Dateクラスの日付と文字列の操作」2ページ目からダウンロードできる。

[ムービープレビュー]を確かめると,日付の年は下2桁が表示される図3)。

図3 年は下2桁が表示された

図3 年は下2桁が表示された

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書

コメント

コメントの記入