AS 3.0实现表情符号替换成图片(更新思路)

本文介绍了一种在AS3.0中优化表情替换的方法,通过使用正则表达式匹配并替换文本中的特定表情标签,提高了处理效率。文中详细展示了如何定义表情及其对应的图片URL,并通过实例代码说明了这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    之前在前面实现的一些方法,虽然可以实现,但是不够人性化,使用不方便,每一次都要添加很多相应的表情和图片地址,看新想法:

Flash文件第一帧内容:

    import flash.text.TextField;
var old:uint=getTimer();
var str1:String="得分的将发生的房间
呵呵]/gvar myPattern1:RegExp
[嘻嘻]/gvar myPattern2:RegExp
[哈哈]
[爱你]gfh
[晕]gmyPattern5:RegExp
[泪]myPattern6:RegExp
[馋嘴]gp
[抓狂]gern8:RegExp
[哼]gvar myPattern9:RegExp
[可爱]";
var text1:TextField=new TextField();
text1.autoSize=TextFieldAutoSize.LEFT;
text1.multiline=true;//允许多行,要
发挥作用就要设置
text1.wordWrap=true;//自动换行,要图片能看就必须要设置
text1.width=stage.stageWidth;//要想看到文字这个要设置
text1.height=stage.stageHeight;//要想看到文字这个要设置

var chang1:urlChange1=new urlChange1();
str1=chang1.Change(str1);
var now:uint=getTimer();
trace(now-old);
trace(str1);
text1.htmlText=str1;
stage.addChild(text1);

AS 3.0 代码

package  {
 
 public class urlChange1 {

  public function urlChange1() {
   // constructor code
  }
  public function Change(str:String):String
  {
      var newstr:String;
   //定义正则法规,匹配中括号里面汉字
   var myPattern:RegExp=//[([/u4e00-/u9fa5]*)/]/g;
   //定义搜索字符串,替换数组
   var myString:Array=new Array();
   myString.push("[呵呵]","[嘻嘻]","[哈哈]","[爱你]","[晕]","[泪]","[馋嘴]","[抓狂]","[哼]","[可爱]");
   //定义代替文本数组,下面rep数组和上面myString数组两个要一一对应,否则会出错
   var rep:Array=new Array();
   rep.push("",
    "",
    "",
    "",
       "",
       "",
       "",
       "",
       "",
       "");
   //定义搜索到匹配数组保存起来
   var pattern:Array=str.match(myPattern);
   //使用双循环替换中文字符串
   for(var i:int=0;i    {
    //替换相应的标签,先是找到在myString中的表情的编号,然后找到rep数组对应的图片进行替换
    newstr=str.replace(pattern[i],rep[myString.indexOf(pattern[i])]);
    //replace方法并没有改变str内容,不赋值的话,只能得到最后一个表情
    str=newstr;
    }
    /*
   trace(pattern.length);
   trace(pattern);
   */
   return newstr;
   //用完可以去掉,免得浪费空间
   pattern=null;
  }

 }
 
}

    以上代码测试比之前版本的都好多了,起码快了好多,大概是3到4毫秒

    可是为了更加实用,外面可以定义表情和图片地址,我们把里面的抽出来作为传递的参数:

     Flash文件第一帧内容:

import flash.text.TextField;
var old:uint=getTimer();
var str1:String="得分的将发生的房间
呵呵]/gvar myPattern1:RegExp
[嘻嘻]/gvar myPattern2:RegExp
[哈哈]
[爱你]gfh
[晕]gmyPattern5:RegExp
[泪]myPattern6:RegExp
[馋嘴]gp
[抓狂]gern8:RegExp
[哼]gvar myPattern9:RegExp
[可爱]";
//定义搜索字符串,替换数组
var faceString:Array=new Array();
faceString.push("[呵呵]","[嘻嘻]","[哈哈]","[爱你]","[晕]","[泪]","[馋嘴]","[抓狂]","[哼]","[可爱]");
   //定义代替文本数组,下面rep数组和上面myString数组两个要一一对应,否则会出错
var urlArray:Array=new Array();
urlArray.push("",
    "",
    "",
    "",
       "",
       "",
       "",
       "",
       "",
       "");
var text1:TextField=new TextField();
text1.autoSize=TextFieldAutoSize.LEFT;
text1.multiline=true;//允许多行,要
发挥作用就要设置
text1.wordWrap=true;//自动换行,要图片能看就必须要设置
text1.width=stage.stageWidth;//要想看到文字这个要设置
text1.height=stage.stageHeight;//要想看到文字这个要设置
var chang1:urlChange1=new urlChange1();
str1=chang1.Change(str1,faceString,urlArray);
var now:uint=getTimer();
trace(now-old);
trace(str1);
text1.htmlText=str1;
stage.addChild(text1);

AS 3.0 代码

package  {
 
 public class urlChange1 {

  public function urlChange1() {
   // constructor code
  }
  public function Change(str:String,faceString:Array,urlArray:Array):String
  {
      var newstr:String;
   //定义正则法规,匹配中括号里面汉字
   var myPattern:RegExp=//[([/u4e00-/u9fa5]*)/]/g;
   //定义搜索到匹配数组保存起来
   var pattern:Array=str.match(myPattern);
   //使用双循环替换中文字符串
   for(var i:int=0;i    {
    //替换相应的标签,先是找到在myString中的表情的编号,然后找到rep数组对应的图片进行替换
    newstr=str.replace(pattern[i],urlArray[faceString.indexOf(pattern[i])]);
    //replace方法并没有改变str内容,不赋值的话,只能得到最后一个表情
    str=newstr;
    }
    /*
   trace(pattern.length);
   trace(pattern);
   */
   return newstr;
   //用完可以去掉,免得浪费空间
   pattern=null;
  }

 }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值