12.5.获取子串

问题
我要从字符串中提取子串
解决办法
使用substring( ),substr( ),或slice( )方法
讨论
substring( ),substr( ),和slice( )方法都能返回子串且不会影响原始字符串,不同点是接受参数不同。

substr( )方法接受两个参数
startIndex
字串第一个字符位置,该值可以是负数,负数表示从字符串末尾开始,-1表示最后一个字符。
length
获取子串的长度,如果忽略此参数表示从起始位置开始到最后。
+展开
-ActionScript
var example:String = "Bunnies";
trace( example.substr( 0 ) ); // 显示:Bunnies
trace( example.substr( 0, 3 ) ); // 显示:Bun
trace( example.substr( 3, 3 ) ); // 显示:nie
trace( example.substr( -1 ) ); // 显示:s
trace( example.substr( -2, 5 ) ); // 显示:es


substring( )和slice( )方法接受同样的参数
startIndex
字串第一个字符位置
endIndex
子串的最后个字符位置。子串包含起始位置的字符,但是不包含终止位置的字符,如果此参数忽略,表示从起始位置到源字符串最后。

substring( )只接受正数,如果遇到负数都被转换为0处理,如果endIndex小于startIndex,,则会自动对调,因此startIndex总是小的数。slice( )方法的startIndex和endIndex参数也都是正数,如果endIndex小于startIndex则返回-1。
+展开
-ActionScript
var example:String = "Rabbits";
// 两者都输出整个字符串,从0开始到最后(example.length - 1).
trace( example.substring( 0 ) ); // 显示: Rabbits
trace( example.slice( 0 ) ); // 显示: Rabbits
// substring( )方法没有输出,因为它把负数都转为0了。slice( )方法输出"it",其中不包含最后个字符。
trace( example.substring( -3, -1 ) ); // 无输出
trace( example.slice( -3, -1 ) ); // 显示:it
// 都输出"ab".
trace( example.substring( 1, 3 ) ); // 显示:ab
trace( example.slice( 1, 3 ) ); // 显示:ab
// substring( )方法输出子串"ab",因为它会自动对调两个参数,slice( )方法没有输出
trace( example.substring( 3, 1 ) ); // 显示:ab
trace( example.slice( 3, 1 ) ); // 无输出

这些函数一般都和indexOf( )和lastIndexOf( )方法一起使用,先用indexOf( )和lastIndexOf( ) 方法搜索子串,然后用上面的这些方法提取子串。

下面的例子提取文件扩展名和文件名(除去扩展名),通过“.”符号分离:
+展开
-ActionScript
var filename:String = "document.jpg";
// 找出“.”符号的位置
var extensionIndex:Number = filename.lastIndexOf( '.' );
// 提取文件名
var extensionless:String = filename.substr( 0, extensionIndex );
trace( "The filename is " + extensionless );
// 提取扩展名("jpg")
var extension:String = filename.substr( extensionIndex + 1, filename.length );
trace( "The file extension is " + extension );

也可用split( )方法:
+展开
-ActionScript
var filename:String = "document.jpg";
var nameParts:Array = filename.split(".");
var extensionless:String = nameParts[0];
trace ("The filename is " + extensionless);
var extension:String = nameParts[1];
trace ("The file extension is " + extension);

这里有个问题,如果文件名本身也含有“.”符号,这么上面的两个方法提取的子串就会不正确,这时候用lastIdexOf()方法比较好:
+展开
-ActionScript
private function removeExtension( filename:String ):String {
// 找出最后面的“.”字符
var extensionIndex:Number = filename.lastIndexOf( '.' );
if ( extensionIndex == -1 ) {
// 如果没有“.”字符则直接返回filename
return filename;
else {
return filename.substr( 0, extensionIndex );
}
}
// 写在函数里可随时调用
private function extractExtension( filename:String ):String {
var extensionIndex:Number = filename.lastIndexOf( '.' );
if ( extensionIndex == -1 ) {
return "";
else {
return filename.substr( extensionIndex + 1, filename.length );
}
}

例子:
+展开
-ActionScript
trace( removeExtension( "document.jpg" ) ); // 显示: document
trace( removeExtension( "document" ) ); // 显示: document
trace( removeExtension( "document.1.jpg" ) ); // 显示: document.1
trace( extractExtension( "document.jpg" ) ); // 显示: .jpg
trace( extractExtension( "document" ) ); // 显示nothing
trace( extractExtension( "document.1.jpg" ) ); // 显示: .jpg

加支付宝好友偷能量挖...


评论(0)网络
阅读(102)喜欢(0)flash/flex/fcs/AIR