文字列について(String)
文字列について
■文字列について
■文字列のデータ型について
文字列は、プリミティブ型となります。
基本的で単純なデータ型です。
文字列を他の変数に渡すと、文字列全体が複製され、新しい文字列となります。
■文字コードについて
Flash 6 以降であれば、Unicode で動作します。
テキストの読み込みや、テキストの出力などの処理には、UTF-8 が採用されます。
Flash 5 以前の場合、実行環境のロケール言語で動作します。
例えば、英語版の Windows XP では "CP1252"、日本語版の Windows XP では "Shift-JIS" となります。
■String クラスについて
String クラスは、文字列用のクラスです。
■文字列から String クラスのプロパティやメソッドを利用する
文字列の後に、ドット演算子や配列アクセス演算子を記述すると、その瞬間だけ String オブジェクトに変換されます。
プロパティの追加を試みてもエラーは発生しませんが、永続しないため無意味です。
文字列を作成する
■String コンストラクタについて
new String ( "値情報" ) :Object
第01引数(略可) | String | オブジェクト内に値情報 [[PrimitiveValue]] を保有したい場合に指定する。 |
戻り値 | Object | Object オブジェクト |
文字列を指定して、オブジェクトを作成する
// ------------------------------------------------------------
// 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 クラスのプロパティについて
■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 |
戻り値 | String | 1文字だけ格納された文字列が得られる。存在しない場合、空文字が得られる。 |
■取得例
位置を指定して、文字列から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() メソッド
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 = "AAAandBBandCCCandDandEEE";
// 文字列を最大で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 | バックスラッシュ(円記号) |
\b | U+0008 | バックスペース |
\f | U+000C | フォームフィード |
\n | U+000A | ラインフィード(改行コード) |
\r | U+000D | キャリッジ・リターン(改行コード) |
\t | U+0009 | 水平タブ |
\' | U+0027 | シングルクォーテーション |
\" | U+0022 | ダブルクォーテーション |
エスケープ文字を含めた文字列を作成する
var str = "\tあいうえお\n\tかきくけこ";
■ActionScript1.0 ~ 2.0 特有の問題について
以下のエスケープシーケンスは、ECMA-262 edition 3 の仕様ですが、対応していません。
バックスラッシュ (U+005C) とみなされるので注意して下さい。
表記 | Unicode | 説明 |
\v | U+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";