Flex 学习笔记 String长度
根据需求要求字符串的长度,网上搜了一堆String长度算法,下面汇总并分析下。
分析代码如下:
<fx:Script>
<![CDATA[
import flash.utils.ByteArray;
//界面初始化
private function init():void{
trace("Length:"+lb.text.length);
//一个字节大概7.5px宽,下面求得的字节数*7.5
//编码转换
var byteArr:ByteArray = new ByteArray();
byteArr.writeMultiByte(lb.text,"gbk");
var byteLength:int = byteArr.length;
trace("Change GBK:"+byteLength +"Length:"+byteLength * 7.5);
//通过正则表达式将1个中文替换成两个"x",实现了真正字节长度的读取.
var n:int = lb.text.replace(/[^\x00-\xff]/g,"xx").length;
trace("Regex:"+n +"Length:"+n * 7.5);
//大小写字母,运算符,百分号等特殊标符使得上面计算结果出来的宽度不如意
//如字体加粗、字体大小调整也使得长度有所变化
//最后使用textMetrics来计算某文本的宽度
var textMetrics:flash.text.TextLineMetrics = lb.measureText( lb.text );
trace("textMetrics width:"+textMetrics.width);
}
]]>
</fx:Script>
<s:Label id="lb" text="abCD一二三四1234" fontSize="16" />
<![CDATA[
import flash.utils.ByteArray;
//界面初始化
private function init():void{
trace("Length:"+lb.text.length);
//一个字节大概7.5px宽,下面求得的字节数*7.5
//编码转换
var byteArr:ByteArray = new ByteArray();
byteArr.writeMultiByte(lb.text,"gbk");
var byteLength:int = byteArr.length;
trace("Change GBK:"+byteLength +"Length:"+byteLength * 7.5);
//通过正则表达式将1个中文替换成两个"x",实现了真正字节长度的读取.
var n:int = lb.text.replace(/[^\x00-\xff]/g,"xx").length;
trace("Regex:"+n +"Length:"+n * 7.5);
//大小写字母,运算符,百分号等特殊标符使得上面计算结果出来的宽度不如意
//如字体加粗、字体大小调整也使得长度有所变化
//最后使用textMetrics来计算某文本的宽度
var textMetrics:flash.text.TextLineMetrics = lb.measureText( lb.text );
trace("textMetrics width:"+textMetrics.width);
}
]]>
</fx:Script>
<s:Label id="lb" text="abCD一二三四1234" fontSize="16" />
初始化页面打出的信息如下:
Length:12
Change GBK:16Length:120
Regex:16Length:120
textMetrics width:142
方法调用
import flash.text.TextLineMetrics;
import spark.components.Label;
private function getLabelWidth(value:String):int{
var lb:Label = new Label();
import spark.components.Label;
private function getLabelWidth(value:String):int{
var lb:Label = new Label();
lb.styleName = "lbStyle";//可添加样式如果 .lbStyle{fontSize: 16;}
lb.regenerateStyleCache( false );
var textMetrics:TextLineMetrics = lb.measureText( value );
return textMetrics.width+10;
}
lb.regenerateStyleCache( false );
var textMetrics:TextLineMetrics = lb.measureText( value );
return textMetrics.width+10;
}