Flashゲーム講座 & アクションスクリプトサンプル集

 

文字列について

 


■文字列について

 
■文字列のデータ型について
 
文字列は、プリミティブ型となります。
 
基本的で単純なデータ型です。
 
文字列は、文字の集合体とも考えられますが、実際はオブジェクトとしては機能しません。
 
例えば、文字列を参照渡しする事はできません。
 
文字列を他の変数に渡すと、文字列全体が複製され、新しい文字列となります。
 
■文字コードについて
 
Flash 6 以降であれば、Unicode で動作します。
 
テキストの読み込みや、テキストの出力などの処理には、UTF-8 が採用されます。
 
Flash 5 以前の場合、実行環境のロケール言語で動作します。
 
例えば、英語版の Windows XP では "CP1252"、日本語版の Windows XP では "Shift-JIS" となります。
 

■String クラスについて

 
String クラスは、文字列用のクラスです。
 
■文字列から String クラスのプロパティやメソッドを利用する
 
文字列の後に、ドット演算子や配列アクセス演算子を記述すると、その瞬間だけ String オブジェクトに変換されます。
 
文字列に対して、あたかも String クラスのプロパティメソッドが存在するかのように、アクセスできます。
 
プロパティの追加を試みてもエラーは発生しませんが、永続しないため無意味です。
 


 

文字列を作成する

 
 


■String コンストラクタについて

 
String コンストラクタを使って、文字列を作成する事はできません。
 
文字列を作成する場合は、文字列リテラルを使用します。
 
String コンストラクタを使用すると、文字列ではなく、オブジェクトを生成する事ができます。
 
これは、Object コンストラクタの引数に、文字列を渡した時と同じ動作となります。
 
new String ( "値情報" ) :Object
第01引数(略可)Stringオブジェクト内に値情報 [[PrimitiveValue]] を保有したい場合に指定する。
戻り値 ObjectObject オブジェクト
 
文字列を指定して、オブジェクトを作成する

// ------------------------------------------------------------
// String オブジェクトを作成する(文字列の作成ではない)
// ------------------------------------------------------------
var obj = new String("あいうえお");

// データ型を確認する(オブジェクトの一種である)
trace(typeof(obj)); // "object"

// 値情報を取得する
trace(obj.valueOf()); // "あいうえお"

// 文字列情報を取得する
trace(obj.toString()); // "あいうえお"


// ------------------------------------------------------------
// 文字列型のデータを指定して、オブジェクトを作成
// ------------------------------------------------------------
var obj = new Object("あいうえお");

// データ型を確認する(オブジェクトの一種である)
trace(typeof(obj)); // "object"

// 値情報を取得する
trace(obj.valueOf()); // "あいうえお"

// 文字列情報を取得する
trace(obj.toString()); // "あいうえお"
 

■文字列リテラルについて

 
文字列を作成するには、文字列リテラルを使用します。
 
文字列全体を、シングルクォーテーション『' '』 か ダブルクォーテーション『" "』でくくります。
 
文字列リテラルを使って、文字列を作成する

// 文字列を作成する
var str = 'あいうえお';
 
文字列リテラルを使って、文字列を作成する

// 文字列を作成する
var str = "かきくけこ";
 
■文字列中にクォーテーションマークを利用する
 
' '』 でくくった場合、文字列内に『 ' 』と記述する事はできません。
 
かわりに、『 \' 』と記述します。
 
" "』 でくくった場合、文字列内に『 " 』と記述する事はできません。
 
かわりに、『 \" 』と記述します。
 
エスケープ文字を使用して、文字列中にクォーテーションを利用する

var str = '<element attribute = "value" >';
var str = "<element attribute = 'value' >";

var str = '<element attribute = \'value\' >';
var str = "<element attribute = \"value\" >";
 
■シングルクォーテーションとダブルクォーテーションの違いについて
 
必要となるエスケープ文字が変化するだけです。
 
C 言語のように、シングルクォーテーションを使って、1文字を表現する事はできません。
 
CGI スクリプトのように、ダブルクォーテーションを使って、変数の中身を展開する事はできません。
 

■文字列の真偽判定について

 
Flash 6 以前では、文字列の真偽判定が、一般的な ECMAScript の仕様と異なります。
 
Flash 7 以降では、空文字は偽、それ以外はすべて真となります。
 
Flash 6 以前では、文字列が、数値として評価されます。
 
数値としての結果が 0 なら偽、それ以外はすべて真となります。
 
数値の変換に失敗した場合、結果はすべて偽となります。
 
例えば、以下の様なコードは、バージョンによって結果が異なります。
 
文字列の真偽判定の動作を確認する

// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str = "あいうえお";

// ------------------------------------------------------------
// 文字列の真偽判定(Flash 6 以前では偽)
// ------------------------------------------------------------
if(str){
	trace("真");
}else{
	trace("偽");
}

// ------------------------------------------------------------
// Boolean 関数の結果
// ------------------------------------------------------------
trace( Boolean(str) ); // true (Flash 6 以前では偽)
trace( Boolean("0") ); // true (Flash 6 以前では偽)
trace( Boolean("1") ); // true (Flash 6 以前では真)
 
互換性を考慮する場合、Boolean() 関数のかわりとなる、独自の評価関数を用意するといいでしょう。
 
真偽判定を行う関数を用意して、一般的な仕様に合わせる

// ------------------------------------------------------------
// 真偽判定を行う関数
// ------------------------------------------------------------
function BoolOf (v){
	if((typeof(v) == "string") && (v != "")) return true;
	if(v) return true;
	return false;
}

// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str = "あいうえお";

// ------------------------------------------------------------
// 文字列の真偽判定
// ------------------------------------------------------------
if(BoolOf(str)){
	trace("真");
}else{
	trace("偽");
}

// ------------------------------------------------------------
// BoolOf 関数の結果
// ------------------------------------------------------------
trace( BoolOf(str) ); // true
trace( BoolOf("0") ); // true
trace( BoolOf("1") ); // true
 

■文字列の連結について

 
■文字列と文字列の連結について
 
連結演算子『 + 』『 += 』を使用すると、文字列同士を連結する事ができます。
 
2つの文字列を連結し、新しい1つの文字列が生成されます。
 
文字列の最後尾に、任意の文字列を連結する

// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str = "あいうえお";

// ------------------------------------------------------------
// 文字列の最後尾に、任意の文字列を連結する
// ------------------------------------------------------------
str += "かきくけこ";

// 出力テスト
trace(str); // "あいうえおかきくけこ"
 
文字列同士を連結し、新しい文字列を生成する

// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str0 = "あいうえお";
var str1 = "かきくけこ";

// ------------------------------------------------------------
// 文字列同士を連結し、新しい文字列を生成する
// ------------------------------------------------------------
var str2 = str0 + str1;

// 出力テスト
trace(str2); // "あいうえおかきくけこ"
 
■数値と文字列の連結について
 
「数値」と「文字列」を連結すると、結果は「文字列」となります。
 
「数値」と「文字列」を連結した場合の動作を確認する

// 文字列を作成する
var str = 123 + "あいう";

// 出力テスト
trace(str); // "123あいう
 
■数値の計算と、文字列の連結が混在している場合
 
例えば、以下のような連結を行います。
 
数値の計算と、文字列の連結が混在している場合

// 文字列を作成する
var str = 1 + 2 + 3 + "あいう" + 49 + 58 + 67 + "かきく";

// 出力テスト
trace(str); // "6あいう495867かきく"
 
左から順番に計算されます。
 
「 1 + 2 + 3 」までは、数値同士の計算です。
 
それ以降の「 "あいう" + 49 + 58 + 67 + "かきく" 」は、文字列としての連結となります。
 
丸括弧 () を付けると、先に計算を発生させる事ができます。
 
数値の計算と、文字列の連結が混在している場合は、数値の計算部分に、できるだけ丸括弧 () を付けておくといいでしょう。
 
「数値」の計算を先に行いたい場合は、丸括弧を付ける

// 文字列を作成する
var str = (1 + 2 + 3) + "あいう" + (49 + 58 + 67) + "かきく";

// 出力テスト
trace(str); // "6あいう174かきく"
 

■文字列の比較について

 
■文字列同士が一致しているか調べる
 
厳密等価演算子『 === 』を使用すると、文字列同士が一致しているか調べる事ができます。
 
文字列同士が一致しているか調べる (Flash 6 以降)

// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str0 = "あいうえお";
var str1 = "あいうえお";

// ------------------------------------------------------------
// 文字列が一致しているか調べる
// ------------------------------------------------------------
var result = (str0 === str1);

// 出力テスト
trace(result); // true
 
■文字列同士を比較する
 
比較演算子『 < 』『 > 』を使用すると、文字列同士を比較する事ができます。
 
文字コードの大小を比較します。
 
文字列同士を比較する

// ------------------------------------------------------------
// 文字列を作成する
// ------------------------------------------------------------
var str0 = "あああああ";
var str1 = "ああああい";

// ------------------------------------------------------------
// 文字列を比較する
// ------------------------------------------------------------
if(str0 === str1){

	trace("厳密に等しい");

}else if(str0 < str1){

	trace(str0 + " < " + str1);

}else if(str0 > str1){

	trace(str0 + " > " + str1);

}
 


 

String クラスのプロパティについて

 


■String クラスのプロパティ


String クラスには、以下のプロパティがあります。
 
プロパティ 説明
length Number 文字の総数を取得する
 
 


■length プロパティ


文字の総数を取得するには、length プロパティを使用します。
 
文字の総数を調べる

// 文字列を作成する
var str = "あいうえお";

// 文字の総数を取得
var num = str.length;

// 出力テスト
trace(num); // 5
 


 

String クラスのメソッドについて

 


■String クラスのメソッド一覧


String クラスには、以下のメソッドがあります。
 
メソッド 説明
String.fromCharCode() 文字コードを指定して、文字列を取得する。
charAt() 位置を指定して、文字列から1文字を取得する。
charCodeAt() 位置を指定して、文字列から文字コードを取得する。
concat() 2つ以上の文字列を繋げて、新しい文字列を取得する。
slice() 開始位置と終了位置を指定して、新しい文字列を取得する。
substring() 開始位置と終了位置を指定して、新しい文字列を取得する。(逆指定可)
substr() 開始位置と個数を指定して、新しい文字列を取得する。
split() 指定したワードで文字列を分割し、結果を配列で取得する。
indexOf() 最先頭から文字列内を検索し、見つかった位置を取得する。
lastIndexOf() 最後尾から文字列内を検索し、見つかった位置を取得する。
toLowerCase() 大文字を小文字に変換した結果を、新しい文字列として取得する。(通常)
toUpperCase() 小文字を大文字に変換した結果を、新しい文字列として取得する。(通常)
 
 


■String.fromCharCode() メソッド

 
文字コードを指定して、文字列を取得するには、String.fromCharCode() メソッドを使用します。
 
Flash 6 以降であれば、Unicode を指定します。
 
String.fromCharCode( 文字コード ... ) :String
可変引数(略可)Number文字コードを指定する。可変引数から複数の文字コードの指定が可能。
戻り値 String文字列が得られる。存在しない場合、空文字が得られる。
 
■取得例
 
文字コードを指定して、1文字を取得する。

// 文字コードを指定して、1文字を取得する
var c0 = String.fromCharCode(0x41);
var c1 = String.fromCharCode(0x3042);

// 出力テスト
trace(c0); // "A"
trace(c1); // "あ"
 
文字コードを順番に指定して、文字列を取得する。

// 文字コードを順番に指定して、文字列を取得する。
var str = String.fromCharCode(0x41,0x42,0x43,0x44,0x45,0x46,0x47);

// 出力テスト
trace(str); // "ABCDEFG"
 

■charAt() メソッド

 
位置を指定して、文字列から1文字を取得するには、charAt() メソッドを使用します。
 
String.charAt( 位置 ) :String
第01引数(略可)Number位置を指定する。デフォルトは 0
戻り値 String1文字だけ格納された文字列が得られる。存在しない場合、空文字が得られる。
 
■取得例
 
位置を指定して、文字列から1文字を取得する。

// 文字列を作成
var str = "あいうえお";

// 位置を指定して、文字列から1文字を取得する
var c0 = str.charAt(1);
var c1 = str.charAt(3);

// 出力テスト
trace(c0); // "い"
trace(c1); // "え"
 

■charCodeAt() メソッド

 
位置を指定して、文字列から文字コードを取得するには、charCodeAt() メソッドを使用します。
 
Flash 6 以降であれば、Unicode が得られます。
 
String.charCodeAt( 位置 ) :Number
第01引数(略可)Number位置を指定する。デフォルトは 0
戻り値 Number文字コードが得られる。存在しない場合、NaN 値が得られる。
 
■取得例
 
位置を指定して、文字列から文字コードを取得する。

// 文字列を作成
var str = "あいうえお";

// 位置を指定して、文字列から文字コードを取得する
var c0 = str.charCodeAt(0);
var c1 = str.charCodeAt(3);

// 出力テスト
trace(c0); // 12354 (0x3042)
trace(c1); // 12360 (0x3048)
 
任意の文字コードを取得する。

// 'あ' の文字コードを取得
var c = 'あ'.charCodeAt();

// 出力テスト
trace(c); // 12354 (0x3042)
 

■concat() メソッド

 
2つ以上の文字列を繋げて、新しい文字列を取得するには、concat() メソッドを使用します。
 
連結演算子を使用した方が、高速で動作します。
 
String.concat( 文字列 ... ) :String
可変引数(略可)String連結したい文字列を指定。引数の最先頭から最後尾の順番で結合される。
戻り値 String新しい文字列が得られる。
 
■使用例
 
2つの文字列を結合して、新しい文字列を取得する。

// 文字列を作成
var str0 = "あいうえお";
var str1 = "かきくけこ";

// 文字列を結合して、新しい文字列を取得する
var str2 = str0.concat(str1);

// 出力テスト
trace(str2); // "あいうえおかきくけこ"
 
4つの文字列を結合して、新しい文字列を取得する。

// 文字列を結合して、新しい文字列を取得する
var str = "あいう".concat("え" , "おか" , "き" , "くけこ");

// 出力テスト
trace(str); // "あいうえおかきくけこ"
 

■slice() メソッド

 
開始位置と終了位置を指定して、新しい文字列を取得するには、slice() メソッドを使用します。
 
substring() メソッドと違い、開始位置と終了位置を、逆に指定する事はできません。
 
第02引数で指定する終了位置は、取得対象に含まれません。
 
String.slice( 開始位置 , 終了位置 ) :String
第01引数(略可)Number開始位置を指定。(0 から始まる番号)デフォルトは 0
第02引数(略可)Number終了位置を指定。(0 から始まる番号)省略した場合は最後尾まで。
マイナス値を指定すると「length + 第02引数」 の位置。(-1で最後尾は含まれない)
戻り値 String新しい文字列が得られる。
 
■使用例
 
開始位置と終了位置を指定して、新しい文字列を取得する

// 文字列を作成
var str0 = "あいうえおかきくけこ";

// 開始位置と終了位置を指定して、新しい文字列を取得する
var str1 = str0.slice(2,5);

// 出力テスト
trace(str1); // "うえお"
 

■substring() メソッド

 
開始位置と終了位置を指定して、新しい文字列を取得するには、substring() メソッドを使用します。
 
slice() メソッドと違い、開始位置と終了位置を、逆に指定しても動作します。
 
終了位置は、取得対象に含まれません。
 
String.substring( 開始位置 , 終了位置 ) :String
第01引数(略可)Number開始位置を指定。(0 から始まる番号)デフォルトは 0
第02引数(略可)Number終了位置を指定。(0 から始まる番号)省略した場合は最後尾まで。
第01引数より小さい値を指定した場合、第02引数が開始位置となり、第01引数が終了位置となる。
戻り値 String新しい文字列が得られる。
 
■使用例
 
開始位置と終了位置を指定して、新しい文字列を取得する

// 文字列を作成
var str0 = "あいうえおかきくけこ";

// 開始位置と終了位置を指定して、新しい文字列を取得する
var str1 = str0.substring(2,5);

// 出力テスト
trace(str1); // "うえお"
 

■substr() メソッド

 
開始位置と個数を指定して、新しい文字列を取得するには、substr() メソッドを使用します。
 
String.substr( 開始位置 , 個数 ) :String
第01引数(略可)Number開始位置を指定。(0 から始まる番号)デフォルトは 0
第02引数(略可)Number個数を指定。省略した場合は最後尾まで。0 以下の値を指定すると空文字が得られる。
戻り値 String新しい文字列が得られる。
 
■使用例
 
開始位置と個数を指定して、新しい文字列を取得する

// 文字列を作成
var str0 = "あいうえおかきくけこ";

// 開始位置と個数を指定して、新しい文字列を取得する
var str1 = str0.substr(5,3);

// 出力テスト
trace(str1); // "かきく"
 

■split() メソッド

 
指定したワードで文字列を分割し、結果を配列で取得するには、split() メソッドを使用します。
 
第02引数は、Flash 6 以降から対応しています。
 
String.split( "検索ワード" , 分割制限 ) :Array
第01引数(略可)String検索ワードを指定。空文字を指定した場合、1文字つずつ分割される。
第02引数(略可)Number分割を試みる回数の上限値を指定する。省略した場合、文字列の最後尾まで試みる。
戻り値 Array新しい配列が得られる。ワードが見つからなかった場合、0 番目に元の文字列がそのまま格納されている。
 
■使用例
 
指定したワードで文字列を分割し、結果を配列で取得する

// 文字列を作成
var str = "あ=いい=ううう=ええ=お";

// 文字列を分割し、配列を取得する
var ary = str.split("=");

// 出力テスト
trace(ary); // [ "あ" , "いい" , "ううう" , "ええ" , "お" ]
 
指定したワードで文字列を、最大で2回まで分割し、結果を配列で取得する

// 文字列を作成
var str = "AAAandBBandCCCandandEEE";

// 文字列を最大で2回まで分割し、配列を取得する
var ary = str.split("and" , 2);

// 出力テスト
trace(ary); // [ "AAA" , "BB" ]
 

■indexOf() メソッド

 
最先頭から文字列内を検索し、見つかった位置を取得するには、indexOf() メソッドを使用します。
 
最先頭からではなく、途中から検索を開始したい場合は、第02引数に開始位置を指定します。
 
String.indexOf( "検索ワード" , 検索開始位置 ) :Number
第01引数(略可)String検索ワードを指定。
第02引数(略可)Number検索を開始する位置を指定。デフォルトは 0
戻り値 Numberワードが見つかった場合、位置が得られる。ワードが見つからなかった場合、-1 が得られる。
 
■使用例
 
最先頭から文字列内を検索し、見つかった位置を取得する

// 文字列を作成
var str = "---あいう-----";

// 最先頭から文字列内を検索する
var pos = str.indexOf("あいう");

// 出力テスト
trace(pos); // 3
 
本文全体を、最先頭から順番に検索する

// 検索本文
var source = "--あいう------あいう--あいう------あいう--------";

// 検索ワード
var search = "あいう";

// 検索位置
var pos = 0;

while(true){

	// 指定位置から文字列内を検索する
	pos = source.indexOf(search,pos);

	// 見つからなかった場合終了
	if(pos == -1) break;

	// 出力テスト
	trace("pos:" + pos);

	// 次の検索開始位置
	pos += search.length;
}
 

■lastIndexOf() メソッド

 
最後尾から文字列内を検索し、見つかった位置を取得するには、lastIndexOf() メソッドを使用します。
 
最後尾からではなく、途中から検索を開始したい場合は、第02引数に開始位置を指定します。
 
例えば、文字列の最後尾から調べるなら、( length - (検索ワードの文字数) ) を指定します。
 
例えば、文字列の最後尾の1つ前から調べるなら、( length - (検索ワードの文字数) - 1 ) を指定します。
 
String.lastIndexOf( "検索ワード" , 検索開始位置 ) :Number
第01引数(略可)String検索ワードを指定。
第02引数(略可)Number検索を開始する位置を指定。デフォルトは最後尾から。マイナス値を指定した場合、見つからない。
戻り値 Numberワードが見つかった場合、位置が得られる。ワードが見つからなかった場合、-1 が得られる。
 
■使用例
 
最後尾から文字列内を検索し、見つかった位置を取得する

// 文字列を作成
var str = "-----あいう---";

// 最後尾から文字列内を検索する
var pos = str.lastIndexOf("あいう");

// 出力テスト
trace(pos); // 5
 
本文全体を、最後尾から順番に検索する

// 検索本文
var source = "--あいう------あいう--あいう------あいう--------";

// 検索ワード
var search = "あいう";

// 検索位置
var pos = source.length;

while(pos >= 0){

	// 指定位置から文字列内を検索する
	pos = source.lastIndexOf(search,pos);

	// 見つからなかった場合終了
	if(pos == -1) break;

	// 出力テスト
	trace("pos:" + pos);

	// 次の検索開始位置
	pos -= search.length;
}
 

■toLowerCase() メソッド

 
大文字を小文字に変換した結果を取得するには、toLowerCase() メソッドを使用します。
 
■使用例
 
大文字を小文字に変換する

// 文字列を作成
var str0 = "AbCdEfG";

// 大文字を小文字に変換する
var str1 = str0.toLowerCase();

// 出力テスト
trace(str1); // "abcdefg"
 

■toUpperCase() メソッド

 
小文字を大文字に変換した結果を取得するには、toUpperCase() メソッドを使用します。
 
■使用例
 
小文字を大文字に変換する

// 文字列を作成
var str0 = "AbCdEfG";

// 小文字を大文字に変換する
var str1 = str0.toUpperCase();

// 出力テスト
trace(str1); // "ABCDEFG"
 
 

 

数値型から文字列に変換する

 
 


■String() 関数を使用する

 
任意のデータを、文字列に変換するには、String() 関数を使用します。
 
String ( * ) :String
第01引数(略可)*任意のデータを指定。
戻り値 String文字列に変換した結果が得られる
 
String() 関数を使って、文字列型に変換する

// 数値を作成する
var value = 123.456;

// 文字列に変換する
var str = String(value);

// 出力テスト
trace(str); // "123.456"
trace(typeof(str)); // "string"
 

■連結演算子を使って、空文字列を連結する

 
任意のデータを、空文字列と連結すると、文字列に変換する事ができます。
 
空文字と連結して、文字列に変換する

// 数値を作成する
var value = 123.456;

// 空文字と連結して、文字列に変換する
var str = "" + value;

// 出力テスト
trace(str); // "123.456"
trace(typeof(str)); // "string"
 


 

文字列リテラルのエスケープについて

 


■文字列リテラルのエスケープについて

 
■エスケープ文字について
 
変換可能な、エスケープシーケンスの一覧です。
 
表記Unicode説明
\\U+005Cバックスラッシュ(円記号)
\bU+0008バックスペース
\fU+000Cフォームフィード
\nU+000Aラインフィード(改行コード)
\rU+000Dキャリッジ・リターン(改行コード)
\tU+0009水平タブ
\'U+0027シングルクォーテーション
\"U+0022ダブルクォーテーション
 
エスケープ文字を含めた文字列を作成する

var str = "\tあいうえお\n\tかきくけこ";
 
■ActionScript1.0 ~ 2.0 特有の問題について
 
以下のエスケープシーケンスは、ECMA-262 edition 3 の仕様ですが、対応していません。
 
バックスラッシュ (U+005C) とみなされるので注意して下さい。
 
表記Unicode説明
\vU+000B垂直タブ
 
■ Unicodeスカラ値について
 
Flash 6 以降では、\uFFFF と記述すると、Unicode 1文字分を表現できます。
 
FFFF の部分には、ユニコードを 16 進数で表記します。
 
Unicodeスカラ値を含めた文字列を作成する

var str = "\u3042 \u3044 \u3046 \u3048 \u304a";
 
■ Hexスカラ値について
 
\xFF と記述すると、0 ~ 255 までの1文字分を表現できます。
 
FF の部分には、0 ~ 255 までの値を、16 進数で表記します。
 
Hexスカラ値を含めた文字列を作成する

var str = "\x41 \x44 \x47 \x4a \x4c";