Bootstrap

Action Script 3.0 - [Flex] 字符串公共处理工具类

工具类对象: StringUtils.as
工具类函数:

  1. xml字符处理
  2. 为空判断
  3. 两头空格去除
  4. 指定字符在字符串中的位置获取
  5. 字符串截取
  6. 从开始下标截取一定长度的字符串
  7. 将字符串转换为数组
  8. 替换字符串
  9. 替换全部字符串
  10. 反转字符
  11. 字符的ASCII码获取
  12. 取得某个位置的字符
  13. 大小写转换
  14. 将字符转换成boolean值
  15. 去除头部的空格
  16. 去除尾部的空格
  17. 是否某个字符串开头
  18. 是否某个字符串开头[忽略大小写]
  19. 是否某个字符串结尾
  20. 是否某个字符串结尾[忽略大小写]
  21. 是否是数字
  22. 是否相同
  23. 是否包含
  24. 按某个标识分割成数组
  25. 与UTF-8编码的相互转换
package com.zhongjyuan.utils
{
	import mx.utils.StringUtil;

	/**
	 * 字符串工具类
	 * @author zhongjyuan
	 * 2023年5月30日15:28:11
	 */
	public class StringUtils
	{
		/**
		 * 实例对象
		 */
		private static var instance:StringUtils;

		/**
		 * 获取实例
		 * @return
		 */
		public static function getInstance():StringUtils
		{
			if (instance == null)
			{
				instance=new StringUtils(new SingletonEnforcer());
			}
			return instance;
		}

		/**
		 * 构造函数(单例)
		 * @param enforcer
		 * @throws Error
		 */
		public function StringUtils(enforcer:SingletonEnforcer)
		{
			if (enforcer == null)
				throw new Error("This class is singletonEnforcer.");
		}


		/**
		 * 空
		 */
		public static var C_EMPTY:String="";

		/**
		 * 空格
		 */
		public static var C_BLANK:String=" ";

		/**
		 * 换行
		 */
		public static var C_NEW_LINE:String="/n";

		/**
		 * Tab符
		 */
		public static var C_TAB:String="/t";

		/**
		 * 回退符
		 */
		public static var C_BACKSAPCE:String="/b";

		/**
		 * 制表符
		 */
		public static var C_NEXTPAGE:String="/f";

		/**
		 * 回车符
		 */
		public static var C_RETURN:String="/r";

		/**
		 * 用在 encodeXML(String) 和 decodeXML(String)
		 */
		private var translateArray:Array=[["&", "&"], [" ", " "], ["<", "<"], [">", ">"], ["\"", "\""], ["'", "'"], ["", "ß"], ["\"", "\""]];

		/**
		 * 替换xml中的特殊字符
		 * @author: zhongjyuan
		 * 2023年5月30日15:35:34
		 * @param text xml内容文本
		 * @return string 处理完成的内容文本
		 */
		public function encodeXML(text:String):String
		{
			var s:String=text;
			for (var i:int=0; i < translateArray.length; i++)
			{
				s=this.replaceAll(s, translateArray[i][0], translateArray[i][1]);
			}
			return s;
		}

		/**
		 * 还原xml中的特殊字符
		 * @author zhongjyuan
		 * 2023年5月30日15:36:03
		 * @param text xml内容文本
		 * @return string 处理完成的内容文本
		 */
		public function decodeXML(text:String):String
		{
			var s:String=text;
			for (var i:int=0; i < translateArray.length; i++)
			{
				s=this.replaceAll(s, translateArray[i][1], translateArray[i][0]);
			}
			return s;
		}

		/**
		 * 是否为空
		 * @author zhongjyuan
		 * 2023年5月30日15:37:08
		 * @param text 内容文本
		 * @return boolean 判断结果
		 */
		public function isEmpty(text:String):Boolean
		{
			if (text == null)
				return true;

			text=this.trim(text);
			if (text == null || text.length <= 0)
				return true;

			return false;
		}

		/**
		 * 去除空格
		 * @author zhongjyuan
		 * 2023年5月30日15:37:55
		 * @param text 内容文本
		 * @return string 处理完成的内容文本
		 */
		public function trim(text:String):String
		{
			return StringUtil.trim(text);
		}

		/**
		 * 字符位置
		 * @author zhongjyuan
		 * 2023年5月30日15:39:28
		 * @param text 内容文本
		 * @param target 目标字符
		 * @param index 开始位置[默认0]
		 * @return int 字符位置(-1表示不存在)
		 */
		public function indexOf(text:String, target:String, index:int=0):int
		{
			return text.indexOf(target, index);
		}

		/**
		 * 字符位置
		 * @author zhongjyuan
		 * 2023年5月30日15:43:36
		 * @param text 内容文本
		 * @param target 目标字符
		 * @param index 开始位置[默认-1]
		 * @return int 字符位置(-1表示不存在)
		 */
		public function lastIndexOf(text:String, target:String, index:int=-1):int
		{
			if (index == -1)
				return text.lastIndexOf(target);
			else
				return text.lastIndexOf(target, index);
		}

		/**
		 * 截取
		 * [注] 1,substring方法中,如果参数为负数,会自动转化为0;
		 *      2,substring方法中,如果结束下标小于开始下标,表示反向截取;
		 * @author zhongjyuan
		 * 2023年5月30日15:47:09
		 * @param text 内容文本
		 * @param index_start 起始位置
		 * @param index_end 结束位置
		 * @return string 处理完成的内容文本
		 */
		public function subString(text:String, index_start:int=0, index_end:int=-1):String
		{
			if (index_end == -1)
			{
				return text.substring(index_start);
			}
			else
			{
				return text.substring(index_start, index_end);
			}
		}

		/**
		 * 截取
		 * [注]start:-1表示倒数第一个字符;-2表示倒数第二个字符,依次类推;
		 *     若指定的长度超过了剩余的长度,则取剩余的全部长度;
		 * @author zhongjyuan
		 * 2023年5月30日15:47:15
		 * @param text 内容文本
		 * @param start 开始位置
		 * @param length 截取长度
		 * @return string 处理完成的内容文本
		 */
		public function substr(text:String, start:int, length:int=-1):String
		{
			if (length == -1)
			{
				return text.substr(start);
			}
			else
			{
				return text.substr(start, length);
			}
		}

		/**
		 * 分割
		 * @author zhongjyuan
		 * 2023年5月30日15:51:29
		 * @param text 内容文本
		 * @param delimiter 切割字符
		 * @return Array 字符串的数组
		 */
		public function split(text:String, delimiter:String):Array
		{
			return text.split(delimiter);
		}

		/**
		 * 替换
		 * @author zhongjyuan
		 * 2023年5月30日15:54:06
		 * @param text 内容文本
		 * @param origin 源字符
		 * @param target 替换字符
		 * @param all 替换所有
		 * @return string 处理完成的内容文本
		 */
		public function replace(text:String, origin:String, target:String, all:Boolean=false):String
		{
			while (text.indexOf(origin) != -1)
			{
				text=text.replace(origin, target);
				if (!all)
					return text;
			}
			return text;
		}

		/**
		 * 替换
		 * @author zhongjyuan
		 * 2023年5月30日15:57:16
		 * @param text 内容文本
		 * @param origin 源字符
		 * @param target 替换字符
		 * @return string 处理完成的内容文本
		 */
		public function replaceAll(text:String, origin:String, target:String):String
		{
			return text.split(origin).join(target);
		}

		/**
		 * 反转
		 * @author zhongjyuan
		 * 2023年5月30日15:58:33
		 * @param text 内容文本
		 * @return string 处理完成的内容文本
		 */
		public function reverse(text:String):String
		{
			var arr:Array=text.split("");
			arr=arr.reverse();
			return arr.join("");
		}

		/**
		 * 字符ASCII码
		 * @author zhongjyuan
		 * 2023年5月30日15:59:28
		 * @param text 内容文本
		 * @param index 字符位置
		 * @return int ASCII码
		 */
		public function charCodeAt(text:String, index:int):int
		{
			return text.charCodeAt(index);
		}

		/**
		 * 字符位置
		 * @author zhongjyuan
		 * 2023年5月30日16:01:13
		 * @param text 内容文本
		 * @param index 字符位置
		 * @return string 字符
		 */
		public function charAt(text:String, index:int):String
		{
			return text.charAt(index);
		}

		/**
		 * 转大写
		 * @author zhongjyuan
		 * 2023年5月30日16:02:07
		 * @param text 内容文本
		 * @return string 处理完成的内容文本
		 */
		public function toUpperCase(text:String):String
		{
			return text.toUpperCase();
		}

		/**
		 * 转小写
		 * @author zhongjyuan
		 * 2023年5月30日16:02:52
		 * @param text 内容文本
		 * @return string 处理完成的内容文本
		 */
		public function toLowerCase(text:String):String
		{
			return text.toLowerCase();
		}

		/**
		 * 转Boolean
		 * @author zhongjyuan
		 * 2023年5月30日16:03:53
		 * @param text 内容文本
		 * @return boolean 转换值
		 */
		public function booleanValue(text:String):Boolean
		{
			var trimmed:String=this.trim(text).toLowerCase();
			return trimmed == "true" || trimmed == "t" || trimmed == "yes" || trimmed == "1";
		}

		/**
		 * 头部空格去除
		 * @author zhongjyuan
		 * 2023年5月30日16:05:49
		 * @param text 内容文本
		 * @return string 处理完成的内容文本
		 */
		public function trimLeadingWhitespace(text:String):String
		{
			var index:int=0;
			var origin:String;
			while ((origin=text.charAt(index)) == C_BLANK)
			{
				index++;
			}
			return this.subString(text, index);
		}

		/**
		 * 尾部空格去除
		 * @author zhongjyuan
		 * 2023年5月30日16:06:44
		 * @param text 内容文本
		 * @return string 处理完成的内容文本
		 */
		public function trimTrailingWhitespace(text:String):String
		{
			var origin:String;
			var index:int=text.length - 1;
			while ((origin=text.charAt(index)) == C_BLANK)
			{
				index--;
			}
			return this.subString(text, 0, index + 1);
		}

		/**
		 * 字符开头
		 * @author zhongjyuan
		 * 2023年5月30日16:07:44
		 * @param text 内容文本
		 * @param suffix 匹配字符串
		 * @return boolean 是否匹配
		 */
		public function startsWith(text:String, suffix:String):Boolean
		{
			if (this.isEmpty(text) || this.isEmpty(suffix))
				return false;

			if (text.length < suffix.length)
				return false;

			return text.indexOf(suffix) == 0;
		}

		/**
		 * 字符开头[忽略大小写]
		 * @author zhongjyuan
		 * 2023年5月30日16:07:44
		 * @param text 内容文本
		 * @param suffix 匹配字符串
		 * @return boolean 是否匹配
		 */
		public function startsWithIgnoreCase(text:String, suffix:String):Boolean
		{
			if (this.isEmpty(text) || this.isEmpty(suffix))
				return false;

			if (text.length < suffix.length)
				return false;

			return text.toLowerCase().indexOf(suffix.toLowerCase()) == 0;
		}

		/**
		 * 字符结尾
		 * @author zhongjyuan
		 * 2023年5月30日16:10:49
		 * @param text 内容文本
		 * @param suffix 匹配字符串
		 * @return boolean 是否匹配
		 */
		public function endsWith(text:String, suffix:String):Boolean
		{
			if (this.isEmpty(text) || this.isEmpty(suffix))
				return false;

			if (text.length < suffix.length)
				return false;

			return text.lastIndexOf(suffix) == text.length - suffix.length;
		}

		/**
		 * 字符结尾[忽略大小写]
		 * @author zhongjyuan
		 * 2023年5月30日16:13:07
		 * @param text 内容文本
		 * @param suffix 匹配字符串
		 * @return boolean 是否匹配
		 */
		public function endsWithIgnoreCase(text:String, suffix:String):Boolean
		{
			if (this.isEmpty(text) || this.isEmpty(suffix))
				return false;

			if (text.length < suffix.length)
				return false;

			var tmp:String=text.toLowerCase();
			var s:String=suffix.toLowerCase();

			return tmp.lastIndexOf(s) == tmp.length - s.length;
		}

		/**
		 * 是否数字
		 * @author zhongjyuan
		 * 2023年5月30日16:13:57
		 * @param text 内容文本
		 * @return boolean 是否数字
		 */
		public function isNumber(text:String):Boolean
		{
			if (this.isEmpty(text))
				return false;

			var regx:RegExp="/^[-+]?/d*/.?/d+(?:[eE][-+]?/d+)?$/";
			return regx.test(text);
		}

		/**
		 * 是否包含
		 * @author zhongjyuan
		 * 2023年5月30日16:17:47
		 * @param text 内容文本
		 * @param suffix 匹配字符串
		 * @return boolean 是否包含
		 */
		public function contains(text:String, suffix:String):Boolean
		{
			return text.indexOf(suffix) != -1;
		}

		/**
		 * 是否相同
		 * @author zhongjyuan
		 * 2023年5月30日16:14:56
		 * @param origin 源内容文本
		 * @param targe 目标内容文本
		 * @return boolean 是否相同
		 */
		public function equals(origin:String, targe:String):Boolean
		{
			return origin == targe;
		}

		/**
		 * 是否相同[忽略大小写]
		 * @author zhongjyuan
		 * 2023年5月30日16:16:33
		 * @param origin 源内容文本
		 * @param targe 目标内容文本
		 * @return boolean 是否相同
		 */
		public function equalsIgnoreCase(origin:String, targe:String):Boolean
		{
			return origin.toLowerCase() == targe.toLowerCase();
		}

		/**
		 * 转UTF-8编码
		 * @author zhongjyuan
		 * 2023年5月30日16:18:55
		 * @param text 内容文本
		 * @return string 处理完成的内容文本
		 */
		public function encodeUTF(text:String):String
		{
			return encodeURIComponent(text);
		}

		/**
		 * 还原UTF-8编码
		 * @author zhongjyuan
		 * 2023年5月30日16:19:37
		 * @param text 内容文本
		 * @return string 处理完成的内容文本
		 */
		public function decodeUTF(text:String):String
		{
			return decodeURIComponent(text);
		}
	}
}

/**
 * 内部类(阻止StringUtils对象通过new进行实例化)
 * @author zhongjyuan
 * 2023年5月30日16:21:01
 */
class SingletonEnforcer
{

}

;