|
<div id="cnblogs_post_body">
根据需求要求字符串的长度,网上搜了一堆String长度算法,下面汇总并分析下。
分析代码如下:
<div class="cnblogs_code"> <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" /> |
|