태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
밤하늘의 실제별, 나도 가질 수 있다?!

[Flex] String 확장 함수들

2007/06/15 14:03

 

[공지]이미지나 링크가 깨졌다면 댓글 부탁드립니다.

Flex의 String 에는 문자열의 앞,뒤쪽의 공백을 지워주는 trim() 함수와
특정문자로 문자열의 요소를 바꿔주는 replace()함수 등이 존재하지 않는다.
String에 replace가 있긴 하지만, 문자열에서 바꾸고자 하는 문자와 맞는 첫번째 문자만 바꿔주기 때문에 진정한 replace를 구현하지 못한다.

이 문서를 올리고 나서 열이아빠님께서 한가지 말씀해 주셔서 알게된 점입니다.
위에 - 표시를 한 부분은 틀립니다.

var str:String = "안녕하세요\n제 이름은 지돌스타\n입니다.";
str2 = str.replace("\n", " ");
trace(str2); // "안녕하세요 제 이름은 지돌스타\n입니다.";

만약 str.replace("\n"," "); 대신  str.replace(/\n/g, " "); 를 하면
결과는 "안녕하세요 제 이름은 지돌스타 입니다." 로 나옵니다.

자세한 내용은 http://flexdocs.kr/docs/flex2/langref/String.html#replace() 를 참고하세요

제가 잘 모르고 글을 올리게 되었네요.
지적해 주신 열이아빠님께 감사드립니다.



아래는 http://flexdocs.kr/docs/flex2/langref/String.html#includeExamplesSummary 에서 가져온 코드이다.

각 함수를 설명하면 다음과 같다.
  • replace(): String 의 split() Methods와 join() Methods를 호출해, 새로운 string에게 건네지는 string의 substring를 삭제합니다.
  • trim(): 건네받은 string를 사용해 trimBack()trimFront() 의 양쪽 모두를 호출해, 갱신된 string를 돌려줍니다.
  • trimFront(): string의 최후로부터 개시해 선두로 향해, string의 말미의 캐릭터가 char Parameters에 일치하지 않게 될 때까지, char Parameters에 일치하는 모든 캐릭터를 재귀적으로 삭제해, 갱신된 string를 돌려줍니다.
  • trimBack(): string의 최후로부터 개시해 선두로 향해, string의 말미의 캐릭터가 char arameters에 일치하지 않게 될 때까지, char Parameters에 일치하는 모든 캐릭터를 재귀적으로 삭제해, 갱신된 string를 돌려줍니다
  • stringToCharacter(): 건네받은 string의 선두 캐릭터를 돌려줍니다


String 활용 (Language : java)
package {
    import flash.display.Sprite;

    public class StringExample extends Sprite {
        public function StringExample() {
            var companyStr:String = new String("     Company X");
            var productStr:String = "Product Z Basic     ";
            var emptyStr:String = " ";
            var strHelper:StringHelper = new StringHelper();

            var companyProductStr:String = companyStr + emptyStr + productStr;
            trace("'" + companyProductStr + "'");    // '     Company X Product Z Basic     '

            companyProductStr = strHelper.replace(companyProductStr, "Basic", "Professional");
            trace("'" + companyProductStr + "'");    // '     Company X Product Z Professional     '

            companyProductStr = strHelper.trim(companyProductStr, emptyStr);
            trace("'" + companyProductStr + "'");    // 'Company X Product Z Professional'
        }
    }
}

class StringHelper {
    public function StringHelper() {
    }

    public function replace(str:String, oldSubStr:String, newSubStr:String) :String {
        return str.split(oldSubStr). join(newSubStr);
    }

    public function trim(str:String, char:String) :String {
        return trimBack(trimFront(str, char), char);
    }

    public function trimFront(str:String, char:String) :String {
        char = stringToCharacter(char);
        if (str.charAt(0) == char) {
            str = trimFront(str.substring(1), char);
        }
        return str;
    }

    public function trimBack(str:String, char:String) :String {
        char = stringToCharacter(char);
        if (str.charAt(str.length - 1) == char) {
            str = trimBack(str.substring(0, str.length - 1), char);
        }
        return str;
    }

    public function stringToCharacter(str:String) :String {
        if (str.length == 1) {
            return str;
        }
        return str.slice(0, 1);
    }
}

글쓴이 : 지돌스타 (http://blog.jidolstar.com/125  )
크리에이티브 커먼즈 라이선스
Creative Commons License

Adobe Flash Platform , ,

Trackback 주소: http://blog.jidolstar.com/trackback/125
  1. replace 에서 정규식을 사용하면서 /g 옵션을 주게 되면
    해당 문자열의 모든 대상에 대한 변경이 가능합니다.
    원하신 의도가 맞나 모르겠네요..ㅠㅠ

  2. 열이아빠님 감사합니다. 제가 잘못된 지식을 가지고 있었네요. 덕분에 공부했습니다. ^^