티스토리 뷰

728x90
반응형
2.0때부터 약간씩 수정하고 추가한 StringUtils 이다.
클래스이름처럼 String에 관련된 유틸 클래스이다.

남에것을 배껴다 쓴것도 있고 좀더 마이그레이션한 것도 있다.
일단 에이전시에서 빨리 쳐내기 위해서 이것저것 가리면 안되기에 ㅎㅎ~

여튼 제목답게 나만 유용한 클래스가 될 듯....





 
package imComponents.oddeye.utils
{
	import flash.utils.ByteArray;
	
	public class StringUtils
	{
		
		public function StringUtils()
		{
		}
		
		/**
		 *
		 * 인자값에 \n 문자열이 있는지 찾아서 해당 문자열에  \n (newline)으로 적용.
		 * @param	str
		 * @return
		 *
		 */
		public static function getEnterKey( str:String ):String
		{
			
			var regx:RegExp = /\w*\\n/g;
			var restr:String = str.replace( regx, "\n" );
			
			return  restr;
		}
		
		public static function getSplitEnterKey( str:String ):String
		{
			var regx:RegExp = /\\n+/g;
			return  str.replace( regx, "" );
		}
		
		/**
		 *
		 * 인자값에 \n 문자가 있는 경우 \n 다음에 오는 문자열들을 다음줄로 치환
		 * @param	str - 적용할 문자
		 * @return
		 *
		 */
		public static function getEnterkeyChange( str:String ):String
		{
			var arr:Array = str.split( "\\n" );
			var restr:String = arr.join( "\n" );
			arr.length=0;
			arr=null;
			return  restr;
		}
		
		/**
		 *
		 * http:// , com, org, net, kr, co 이 삽입된 문자열을 찾아 링크값인지 판별해 별도의 배열로 저장시킨다.
		 * @param	str - 적용할 문자
		 * @return
		 *
		 */
		public static function getLinkPattern( str:String ):Array
		{
			var urlKeys:RegExp = /http:\/\/.*?\.(com|org|net|kr|co)/g;
			return  str.match( urlKeys );
		}
		
		
		
		
		/**
		 *
		 * 제한시킬 문자를 인자값으로 넘겨서 len만큼만 보여준다. 줄임말은 joinStr로 변경할 수 있다.
		 * @param	str - 적용할 문자
		 * @param	len - 제한할 문자수
		 * @param	joinStr - 줄임말 문구
		 * @return
		 *
		 */
		public static function getSelectCropTxt( str:String, len:Number, joinStr:String = "..." ):String
		{
			return  String( str.substr( 0, len ) + joinStr );
		}
		
		/**
		 * 영문, 숫자, 특수문자 찾기~ 반환값이 null이면 해당값이 아닌것~
		 * @param	str
		 * @return
		 */
		public static function getLangEnCheck( str:String ):Array
		{
			var regex:RegExp = /[a-zA-Z\s\d\W]/g;
			return  regex.exec( str );
		}
		
		/**
		 * (
 ~ 
 ~ 	 ~  < ~ > ~   ~&)과 2칸이상 되는 공백 제거 해줌~
		 * @param	str 적용할 문자
		 * @return
		 */
		public static function getClearEscapeCode( str:String ):String
		{
			//&로 시작하는 (#xA #xD #x9 lt gt nbsp amp)문자와 
			//최소대응(.*?)의 모든 문자열(\w)에 ;문자로 끝나는 것이 반복됨(g플래그) 검색~
			var regx:RegExp = /&(#x|amp|quot|lt|nbsp|gt).*?\w;/g;
			
			//  2칸이상포함하는 공백 하나이상 찾기
			var regx2:RegExp = /(  )+/g;
			
			var descript:String = str.replace( regx, "" );
			descript=descript.replace( regx2, "" );
			
			return  descript;
		}
		
		
		
		/**
		 * 한글만 축출하기~
		 * @param	str
		 * @return
		 */
		public static function getKorText( str:String ):String
		{
			var regex:RegExp = /[!.,$%&*()?=+#@~가-힣\s\d]/g;
			var strings:Array = str.match( regex );
			return  strings.join( "" );
		}
		
		/**
		 * ByteArray로 한글 2byte, 영문,숫자 1byte 체크 - 반환값이 true면 한글~
		 * @param	str
		 * @return
		 */
		public static function getIsKorBytes( str:String ):Boolean
		{
			var bytes:ByteArray = new ByteArray();
			bytes.writeMultiByte( str, "utf-8" );
			
			return  ( bytes.length >= 2 ) ? true : false;
		}
		
		/**
		 * 텍스트를 bytes 단위로 자르기~
		 * @param	str
		 * @param	len
		 * @return
		 */
		public static function getByteToSplitTxt( str:String, len:Number ):String
		{
			
			var count:int = 0;
			var resetText:String = "";
			var strLen:int = str.length;
			
			var txtLen:int = StringUtils.getByteTxtLength( str );
			
			if  ( txtLen > len )
			{
				for  ( var i:int = 0; i < strLen; i++ )
				{
					var isKor:Boolean = StringUtils.getIsKorBytes( str.charAt( i ) );
					count+=( isKor ) ? 2 : 1;
					
					if  ( count < len )
					{
						resetText+=str.charAt( i );
					}
					else
					{
						break;
					}
				}
				
				return  resetText+="..";
			}
			else
			{
				return  str;
			}
		
		}
		
		/**
		 * 택스트 byte단위로 text의 length를 반환한다.
		 * @param	str
		 * @return
		 */
		public static function getByteTxtLength( str:String ):int
		{
			var strLen:int = str.length;
			var count:int = 0;
			
			for  ( var i:int = 0; i < strLen; i++ )
			{
				var isKor:Boolean = StringUtils.getIsKorBytes( str.charAt( i ) );
				count+=( isKor ) ? 2 : 1;
			}
			
			return  count;
		}
		
		/**
		 * 단위에 콤마(,)달기~
		 * @param	str
		 * @param	splitStr
		 * @return
		 */
		public static function getAddDecimalPointTxt( str:String, splitStr:String = "" ):String
		{
			var textSet:Array = str.split( splitStr );
			var len:int = textSet.length;
			var count:int = 0;
			
			for  ( var i:int = len; i > 0; i-- )
			{
				++count;
				
				if  ( count % 3 == 0 )
				{
					textSet.splice( i - 1, 0, "," );
				}
				else
				{
					continue;
				}
			}
			return  textSet.join( "" );
		}
		
		/**
		 * 문자열에 제거 하고 싶은 문자열 삽입하여 없애기
		 * @param	str 적용할 텍스트
		 * @param	splitStr 삭제할 텍스트
		 * @return
		 */
		public static function getSplitTxt( str:String, splitStr:String ):String
		{
			return  ( str.split( splitStr ) ).join( "" );
		}
		
		
		
		/**
		 * 찾아야할 문자열을 입력하면 해당 문자열의 시작 인덱스를 반환~  없을시엔 -1을 반환
		 * @param	str 검색할 문자열
		 * @param	key 찾아야할 문자열
		 * @return
		 */
		public static function getSearchStrToIndex( str:String, key:String ):int
		{
			var index:int = -1;
			
			while  (( index=str.indexOf( key, index + 1 ) ) != -1 )
			{
				return  index;
			}
			return  -1;
		}
		
		
		
		/**
		 * 찾아야할 문자열을 입력하면 해당 문자열의 시작 인덱스를 저장한 배열 반환~  없을시엔 빈 배열반환~
		 * @param	str 검색할 문자열
		 * @param	key 찾아야할 문자열
		 * @return
		 */
		public static function getSearchStrToIndexs( str:String, key:String ):Array
		{
			var index:int = -1;
			var ids:Array = [];
			
			while  (( index=str.indexOf( key, index + 1 ) ) != -1 )
			{
				ids.push( index );
			}
			
			if  ( ids.length == 0 )
			{
				ids.push( -1 );
			}
			
			return  ids;
		}
		
		
		/**
		 * 숫자에 붙는 서수( th, nd, rd, st ) 검색하기- 배열로 반환해 준다. 없다면  length는 0;
		 * 배열 length가 0으로 리턴되는 것은 지워주는 것이 좋다~
		 * @param	str
		 * @return
		 */
		public static function getOrdinal( str:String ):Array
		{
			var regx:RegExp =/\d(th|nd|rd|st)\b/g;
			return  str.match( regx );
		}
		
		
		/**
		 * 숫자에 붙는 서수( th, nd, rd, st )를  검색하여 해당 문자열의 인덱스를 담은 배열 반환~ 없다면 length는 0;
		 * @param	str
		 * @return
		 */
		public static function getOrdinalIndex( str:String ):Array
		{
			var findSet:Array = StringUtils.getOrdinal( str );
			var findKey:String;
			
			if  ( findSet.length == 0 )
			{
				findKey="^^@aa@^^";
				findSet=null;
			}
			else
			{
				findKey=findSet.join( "" );
			}
			
			var keyIndex:int = StringUtils.getSearchStrToIndex( str, findKey );
			var ordinalItems:Array = [];
			
			if  ( keyIndex != -1 )
			{
				ordinalItems.push( keyIndex + 1 );
				ordinalItems.push( keyIndex + 2 );
			}
			
			return  ordinalItems;
		}
		
		
		/**
		 * 숫자에 붙는 서수( th, nd, rd, st )를  검색하여  true, false 반환~
		 * @param	str
		 * @param	id loop 변수를 적용할때 대입한다.( 예- 필드 개수만큼 루프를 돌릴때 )
		 * @return
		 */
		public static function getIsOrdinalIndex( str:String, id:Number = -1 ):Boolean
		{
			var ordinals:Array = StringUtils.getOrdinalIndex( str );
			
			if  ( ordinals.length != 0 )
			{
				if  ( id != -1 )
				{
					if  ( ordinals[ 0 ] == id || ordinals[ 1 ] == id )
					{
						return  true;
					}
				}
				else
				{
					var len:int = str.length;
					var k:int = -1;
					
					while  ( ++k < len )
					{
						if  ( ordinals[ 0 ] == k || ordinals[ 1 ] == k )
						{
							return  true;
						}
					}
				}
			}
			return  false;
		}
	}

}
728x90
반응형
댓글