unoh.github.com

ActionScript2.0で文字列処理

2006-07-21 09:50:21 +0000

さかとくです。こんにちは。

ActionScript2.0でプログラムを作っていると、もっと手軽に文字列処理を片付けたいと思うはずです。
Flashではそれほど文字列処理をしないのですが、やっぱり、外部から引数で渡されたデータを加工する必要に迫られてしまいます。

そんなとき、汎用文字列処理クラスを作っておくと手軽にトークンの切り出しや置換を行うことができます。以下は、KStringクラスの使い方です。KStringクラスの内容は後述します。以下のように手軽に使えます。

// 置換
var s:String = KString.replaceAll("abc","a",-"); // 結果 : -bc
// トークンの切り出し
var k:KString = new KString("012-345-678");
trace(k.getToken("-")); // 結果 : 012 
trace(k.getToken("-")); // 結果 : 345 
trace(k.getToken("-")); // 結果 : 678 

そして、以下がKStringクラスのないようです。Flashドキュメントと同じフォルダにコピーしておきます。
// 必ず、"KString.as" という名前で保存。 
class KString
{
    var _str:String;
    
    function KString(s:String)
    {
        _str = s;
    }
    // splitter までの文字列を切り出す。
    function getToken(splitter:String):String
    {
        var i:Number;
        var ret:String;
        var len:Number;
        
        i   = _str.indexOf(splitter, 0);
        len = splitter.length;
        
        if (i == 0) {
            ret = _str;
            _str = "";
            return ret;
        } else {
            // 0123456
            // abcdefg
            // indexOf("de")=> 3 len = 2
            ret  = _str.substr(0, i);
            _str = _str.substr(i + len);
            return ret;
        }
    }
    // findStr を replaceStr に置換する(自身を非破壊)
    function replace(findStr:String, replaceStr:String):String
    {
        var i:Number;
        var len:Number;
        var ret:String;
        var tmp:String;
        len = findStr.length;
        ret = _str;
        for (;;) {
            i   = ret.indexOf(findStr);
            if (i >= 0) {
                tmp = ret.substr(0, i);
                tmp = tmp + replaceStr + ret.substr(i + len);
                ret = tmp;
            } else {
                break;
            }
        }
        return ret;
    }
    // findStr を replaceStr に置換する(自身を破壊的に置換)
    function replaceSelf(findStr:String, replaceStr:String):Void
    {
        _str = this.replace(findStr, replaceStr);
    }
    // 静的に使える汎用関数
    static function replaceAll(s:String, findStr:String, replaceStr:String):String
    {
        var k:KString = new KString(s);
        return k.replace(findStr, replaceStr);
    }
}