C \ # 에서 지정 한 길이 의 중국어 문자열 을 캡 처 합 니 다 (효율 2500 배 향상)

2059 단어 길이 지정
C \ # 에서 문자열 을 자 르 는 것 은 그리 번 거 롭 지 않 습 니 다. 문 제 는 string. Substring () 이라는 방법 으로 중국어 도 하나의 문자 로 계산 하여 실제 응용 에서 문자열 (중 영문 조합) 을 자 른 후의 '길이' 가 일치 하지 않 습 니 다.
국제 관례 에 따 르 면 인터넷 에서 검색 해 보 니 크게 두 개의 절단 알고리즘 을 얻 었 습 니 다. 1. 시작 위치 에서 문 자 를 얻 습 니 다 - > 정규 표현 식 으로 일치 합 니 다 - > 최종 문자열 로 연결 합 니 다.(이것 은 널리 퍼 지 는 방법 이자 효율 이 가장 낮은 방법 입 니 다.) 2. 시작 위치 에서 문 자 를 얻 습 니 다 - > 하나씩 ASCII 로 비교 - > 최종 문자열 로 연결 합 니 다.
이에 비해 알고리즘 2 는 알고리즘 1 보다 높 습 니 다. 왜냐하면 ASCII 는 정규 표현 식 보다 집행 효율 이 높 기 때 문 입 니 다.그러나 최종 적 으로 저 는 알고리즘 2 를 사용 하지 않 고 진일보 한 최적화 를 했 습 니 다.
public static string CutStr(string str, int len)
{
    if (str == null || str.Length == 0 || len <= 0)
    {
        return string.Empty;
    }

    int l = str.Length;

    #region     
    int clen = 0;
    while (clen < len && clen < l)
    {
        //       ,        。
        if ((int)str[clen] > 128) { len--; }
        clen++;
    }
    #endregion

    if (clen < l)
    {
        return str.Substring(0, clen) + "...";
    }
    else
    {
        return str;
    }
}

마지막 으로 비 교 를 통 해 널리 알려 진 알고리즘 1 은 100 회 실행 하면 700 여 밀리초 가 필요 하고 나의 알고리즘 은 700 밀리초 에 250000 회 실행 할 수 있 습 니 다!(주: 실제 운행 시간 은 원본 문자열 의 길이, 캡 처 길이, 컴퓨터 성능 과 관련 이 있 습 니 다. 그러나 같은 조건 에서 의 효율 비율 은 기본적으로 안정 적 입 니 다.)

좋은 웹페이지 즐겨찾기