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" />

 

初始化页面打出的信息如下:

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();
    lb.styleName = "lbStyle";//可添加样式如果 .lbStyle{fontSize: 16;}
    lb.regenerateStyleCache( false ); 
    var textMetrics:TextLineMetrics = lb.measureText( value ); 
    return textMetrics.width+10; 
    }

 

 

 

 

posted @ 2012-07-20 09:15  Anlycp  阅读(687)  评论(0编辑  收藏  举报