Flash:ActionScript3.0で、文字列をsplitするテスト
普段よくPHPで「
$arr = preg_split("/\s*,\s*+/", $str, -1 ,PREG_SPLIT_NO_EMPTY);
」等として、文字列を正規表現で分割して配列にする処理をします。
PHPの場合、「PREG_SPLIT_NO_EMPTY」で空の場合は配列に加えないように指定できるので、文字列の最初や末尾にデリミタ(,)があっても安心できて幸せです。
ActionScript3.0を色々勉強していて、「AS3で同様の処理をしたいと思った場合はどうなるのだろうか」と思い、テストしてみました。
AS3で単純なsplitをしてみる1:空文字
まず、単純なsplitをテストしてみました。
リファレンスには「
function split(delimiter:*, limit:Number = 0x7fffffff):Array
」と記述がありました。
どうやらデリミタと分割の上限しか指定できないもよう。
とりあえず、空の文字列だった場合の挙動をテストしてみました。
var text:String = ""; var arr:Array = text.split(","); trace("文字列 : " + text); trace("パターン : ,"); trace(text); trace("↓"); trace("結果 : 「" + arr.toString() + "」"); // 結果 : 「」
配列arrには空の要素が1つ入って、lengthが1になっていた。
まぁ、予想通りの結果でした。
AS3で単純なsplitをしてみる2
引き続き、単純なsplitをテストしてみました。
テストに使った文字列は、「
,ABC,,DEF,GH, ,IJ, KL,MN ,
」という、何とも意地悪な文字列。これを、単純に「split(",")」として配列にしてみる。
text = ",ABC,,DEF,GH, ,IJ, KL,MN ,"; arr = text.split(","); trace("文字列 : " + text); trace("パターン : ,"); trace(text); trace("↓"); trace("結果 : 「" + arr.toString() + "」"); // 結果 : 「,ABC,,DEF,GH, ,IJ, KL,MN ,」
予想どおりの結果となりました。
最初と最後に「,」があるので、空の要素が入っています。「ABC」「DEF」の間にも空の要素。
となると、「正規表現で何とかするしかない」ということみたい。
っていうか、PHPのpreg_splitの時も「PREG_SPLIT_NO_EMPTY」なんてしないで、正規表現で何とかした方がいいって事かしら。
AdobeのString.splitのリファレンスはコチラ。
http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/String.html#split()
AS3で正規表現を使ってreplace、splitをしてみる
予想した通りというか、やはり正規表現でやるのが一番わかりやすくて、イメージ通りに動いてくれました。
ついでに正規表現でtrimも実現してみました。
//正規表現、split、trimのテスト var text: String; var arr: Array; var ptn: RegExp; trace(""); trace("開始 "); text = " ,ABC,,DEF,GH, ,IJ, KL,MN , "; trace("文字列 : 「" + text + "」"); // カンマの前後にあるスペースを削除 ptn = /\s*,\s*/g; text = text.replace(ptn, ",") // 前後の無駄なカンマを削除 ptn = /(^,|,$)/g; text = text.replace(ptn, "") trace("replace : 「" + text + "」"); // カンマでsplit ptn = /,+/g; arr = text.split(ptn); trace("↓"); trace("結果 : 「" + arr.toString() + "」");
FlashでActionScript3.0をいじっていて思うのですが、いちいちファイルを保存しなくてもデバッグしてみる事ができるのはいいですね。
