AS3类String字符串截取方法比较

时间:2021-03-13 22:31:00

AS3中取字符串字符串的子字符串的方法大概有这三种:substr()、substring()、slice()。下面说一下三者的不同和相同之处:

<1>  substr()方法:           原型: function substr(startIndex:Number = 0, len:Number = 0x7fffffff):String            返回一个子字符串,该子字符串中的字符是通过从指定的 startIndex 开始,按照 len 指定的长度截取所得的。原始字符串保持不变。

            参数            startIndex:Number (default = 0) — 一个整数,指定用于创建子字符串的第一个字符的索引。如果 startIndex 是一个负数,则起始索引从字符串的结尾开始确定,其中 -1 表示最后一个字符。            len:Number (default = 0x7fffffff) — 要创建的子字符串中的字符数。默认值为所允许的最大值。如果未指定 len,则子字符串包括从 startIndex 到字符串结尾的所有字符。            

<----------------------------------上面是帮助文档中的说明------------------------------------->

            当参数为正数时,就不用说了,下面举个例子:
            var str:String = "0123456789";            trace("substr(1,3) =  " + str.substr(1,3));     //输出结果:substr(1,3) = 123    ,   即返回从编号为1的字符开始,截取3个字符的字符串;            下面看看当参数为负值的时候的结果,            1>    第一个参数为负数的时候,方法会自动将其转化为相应的正数,转换方法是从字符串最后开始向前数,-1表示最后一个字符,其实相当于String.length减去这个数的绝对值,例如startIndex=-5相当于startIndex=String.length-5,接着上面的例子:
                 trace("substr(-1,3) = " + str.substr(-1,3));   //输出结果: substr(-1,3) = 9 ;                 trace("substr(str.length-1,3) = " + str.substr(str.length - 1,3));    //输出结果: substr(str.length-1,3) = 9                显然两个结果是相同的
            2>    第二个参数为负数时,第二个参数表示要截取子字符串的长度,常理来说是不可能为负数的,呵呵,但是为负数时同样可以有输出结果,多余的就不说了,其实这个和第一个参数基本是一样的,方法也会自动将其转换成一个正数对待,转换方法和第一个参数一样,即相当于String.length减去这个数的绝对值,例如startIndex=-3相当于len=String.length-3,接着上面的例子:
                   trace("substr(1,-4) = " + str.substr(1,-4));     //输出结果:substr(1,-4) = 123456;                   trace("substr(1,str.length-4) = " + str.substr(1,str.length - 4));     //输出结果:substr(1,str.length-4) = 123456;                显然两个结果是相同;
              3>    两个参数都为负数时:也可以用上述方法计算,但是会出现一个错误,就是当(String.length - |startIndex|) + (String.length - |len|) >= String.length时,substr(startIndex,len)返回的是一个空字符串,而substr((String.length - |startIndex|) , (String.length - |len|))返回的是从String.length - |startIndex|开始到字符串结尾的字符串,如下:
        trace("substr(-5,-5) = " + str.substr(-5,-5));            //输出结果:substr(-5,-5) = trace("substr(str.length-5,str.length-5)="+str.substr(str.length-5,str.length-5));  //输出结果:substr(str.length-5,str.length-5) = 56789        trace("substr(-5,-6) = " + str.substr(-5,-6));              //输出结果:substr(-5,-6) = 5678trace("substr(str.length-5,str.length-6)="+str.substr(str.length-5,str.length-6)); //输出结果:substr(str.length-5,str.length-6) = 5678        还有一种情况就是当startIndex + len >= String.length的时候,会返回字符串startIndex位置到字符串结尾的所有字符串;

<2> substring()方法:            原型:  function substring(startIndex:Number = 0, endIndex:Number = 0x7fffffff):String            返回一个字符串,其中包含由 startIndex 指定的字符和一直到 endIndex - 1 的所有字符。如果未指定 endIndex,则使用 String.length。如果 startIndex 的值等于 endIndex 的值,则该方法返回一个空字符串。如果 startIndex 的值大于 endIndex 的值,则在执行函数之前会自动交换参数。原始字符串保持不变。            参数            startIndex:Number (default = 0) — 一个整数,指定用于创建子字符串的第一个字符的索引。startIndex 的有效值范围为从 0 到 String.length。如果 startIndex 是一个负值,则使用 0 。            endIndex:Number (default = 0x7fffffff) — 一个整数,它比所提取的子字符串中的最后一个字符的索引大 1。endIndex 的有效值范围为从 0 到 String.length。endIndex 处的字符不包括在子字符串中。默认为允许的最大索引值。如果省略此参数,则使用 String.length。如果此参数是一个负值,则使用 0。            

<----------------------------------上面是帮助文档中的说明------------------------------------->            

参数为正数时,也不多说了,特别要注意的一点是,输出的字符串不包括endIndex位置上的字符,即返回值是索引值为startIndex到endIndex - 1的子字符串,上面都很明了了,举个例子:                trace("subString(1,3) = " + str.substring(1,3));      //输出结果:subString(1,3) = 12;            另外注意一点,当startIndex > endIndex时,方法会自动调换两者位置,例如

                trace("subString(3,1) = " + str.substring(3,1));      //输出结果:subString(3,1) = 12;结果和第一个是一样的
            参数为负时,帮助文档也有说明,当参数为负数时,则会用0代替,例如:                substring(-1, 3) == substring(0, 3);                substring(1, -3) == substring(1, 0) == substring(0, 1);

<3> slice()方法:            返回一个字符串,该字符串包括从 startIndex 字符一直到 endIndex 字符(但不包括该字符)之间的所有字符。不修改原始 String 对象。如果未指定 endIndex 参数,此子字符串的结尾就是该字符串的结尾。如果按 startIndex 索引到的字符与按 endIndex 索引到的字符相同或位于后者的右侧,则该方法返回一个空字符串。            参数            startIndex:Number (default = 0) — 片段起始点的从 0 开始的索引。如果 startIndex 是一个负数,则从右到左创建片段,其中 -1 是最后一个字符。            endIndex:Number (default = 0x7fffffff) — 一个比片段终点的索引大 1 的整数。由 endIndex 参数索引的字符未包括在已提取的字符串中。如果 endIndex 是一个负数,则终点根据从字符串的结尾向后数确定,其中 -1 表示最后一个字符。默认为允许的最大索引值。如果省略此参数,则使用 String.length。            

<----------------------------------上面是帮助文档中的说明------------------------------------->            

参数为正数的时候,正常顺序和substring()方法的返回值是相同的,但是当startIndex > endIndex时参数不会自动调换两者位置,返回值为空字符串,如:

                trace("slice(1,3) = " + str.slice(1,3));     //输出结果:slice(1,3) = 12;trace("slice(3,1) = " + str.slice(3,1));     //输出结果:slice(1,3) = ;            参数为负数时,与substr()方法的取值方式是一样的,方法会自动将其转化为相应的正数,转换方法是从字符串最后开始向前数,-1表示最后一个字符,其实相当于String.length减去这个数的绝对值,例如startIndex=-5相当于startIndex=String.length-5,
                    下面是一些案例:
                        trace("slice(1,-3) = " + str.slice(1,-3));trace("slice(1,str.length-3) = " + str.slice(1,str.length-3));trace("slice(-1,3) = " + str.slice(-1,3));trace("slice(str.length-1,3) = " + str.slice(str.length-1,3));                        trace("slice(-1,-3) = " + str.slice(-1,-3));
trace("slice(str.length-1,str.length-3) = " + str.slice(str.length-1,str.length-3));trace("slice(-3,-1) = " + str.slice(-3,-1));trace("slice(str.length-3,str.length-1) = " + str.slice(str.length - 3,str.length - 1));                    上例输出结果:
                     /*****************************************                            slice(1,-3) = 123456                            slice(1,str.length-3) = 123456                            slice(-1,3) =                             slice(str.length-1,3) =                             slice(-1,-3) = 

                            slice(str.length-1,str.length-3) =                             slice(-3,-1) = 78                            slice(str.length-3,str.length-1) = 78                        *****************************************/                    

大家可以考虑一下上述输出结果中为空字符串的原因;