目录表
内容
字符串操作
- 字符串替换:使用新的字符串替换掉原字符串中的指定子字符串
AS Code
// @param sourceStr: 字符串源 // @param oldStr: 要替换掉的字符串 // @param newStr: 新的字符串 // @return 替换完毕的字符串 function replace (sourceStr:String, oldStr:String, newStr:String):String { return sourceStr.split (oldStr).join (newStr); } trace("sourceStr : " + abcadfwefabsdf) trace ("destStr : " + replace ("abcadfwefabsdf", "ab", "e")); // output: // sourceStr : abcadfwefabsdf // destStr : ecadfwefesdf
数学运算
- 带括号的四则运算:对于任意给定的算式,计算其结果
AS Code
var calcStr:String = ""; var opSign:Array; var opNum:Array; var privi:Array = [['(', ')'], ['+', '-'], ['×', '*', '÷', '/']]; // 比较优先级 function checkPrivi(s1:String, s2:String):Boolean { if ((s1 == '(' && s2 == '(') || (s1 == ')' && s2 == ')')) { // 同样是括号,当优先级有差别 return true; } if (s2 == '(') { return true; } if (s2 == '#') { // # 优先级最低 return false; } var p1:Number = -1; var p2:Number = -1; var len:Number = 0; for (var i = 0; i < 3; i++) { len = privi[i].length; for (var j = 0; j < len; j++) { if (privi[i][j] == s1) { p1 = i; } if (privi[i][j] == s2) { p2 = i; } if (p1 > -1 && p2 > -1) { break; } } } // trace("p2"); // trace("p1"); return p2 > p1; } // 单步计算 function calcS(num1:Number, num2:Number, opS:String):Number { // trace("calc :" + num1 + opS + num2); switch (opS) { case '+' : return num1 + num2; break; case '-' : return num1 - num2; break; case '×' : case '*' : return num1 * num2; break; case '÷' : case '/' : return num2 == 0 ? 0 : num1 / num2; } } // 计算字符串 function calc(str:String):Number { if (str.indexOf('#') == -1) { str += '#'; } // trace("calc Str: " + str); opSign = []; opNum = []; var tempNum:Number; var i:Number = 0; var sStr:String; var tempNum:Number = 0; // trace("初始"); // trace("num : " + opNum); // trace("sign :" + opSign); // trace("计算开始"); while (opSign[0] != '#') { // 运算符栈和操作数栈情况 // trace("num : " + opNum); // trace("sign :" + opSign); sStr = str.charAt(i); // trace("待处理字符:" + sStr); if (isNaN(sStr) && sStr != '.') { // trace("处理为运算符"); // 运算符操作 if (opSign.length == 0 || checkPrivi(opSign[opSign.length - 1], sStr)) { // trace("符号入栈:" + sStr); opSign.push(sStr); } else { // trace("计算"); var tempSign:String = String(opSign.pop()); if (tempSign == '(' && sStr == ')') { // trace("消除括号"); i++; continue; } var temp1:Number = Number(opNum.pop()); var temp2:Number = Number(opNum.pop()); // trace("计算结果入栈"); opNum.push(calcS(temp2, temp1, tempSign)); continue; } } else { // trace("处理为数字"); // 取运算数 tempNum = 0; var _s = i var tmpStr:String = ""; do { tmpStr += sStr //tempNum = tempNum * 10 + Number(sStr); i++; sStr = str.charAt(i); } while (isNaN( tmpStr + sStr) == false); opNum.push(Number(tmpStr)); continue; } i++; } return opNum[0]; } trace(calc("10.5+3.2")) // output: 13.7