>백엔드 개발 >C++ >C#의 문자열에서 특수 문자를 가장 효율적으로 제거하려면 어떻게 해야 합니까?

C#의 문자열에서 특수 문자를 가장 효율적으로 제거하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-29 20:22:12673검색

How Can I Most Efficiently Remove Special Characters from Strings in C#?

문자열에서 특수 문자를 제거하는 가장 효율적인 방법 찾기

문자열에서 특수 문자를 제거하는 현재 방법은 비효율적으로 보일 수 있지만 실제로 더 효율적인 접근 방식 중 하나입니다. 배열 액세스를 줄이기 위해 로컬 문자 변수나 열거자를 사용하여 최적화할 수 있습니다. 제공된 코드는 다음과 같은 개선 사항을 제공합니다.

public static string RemoveSpecialCharacters(string str) {
   StringBuilder sb = new StringBuilder();
   foreach (char c in str) {
      if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.' || c == '_') {
         sb.Append(c);
      }
   }
   return sb.ToString();
}

성능 비교

벤치마킹 테스트를 통해 개선된 방법의 효율성이 확인되었습니다. 다음은 24자 문자열에서 각 함수를 백만 번 실행한 다양한 접근 방식의 결과입니다.

  • 원래 함수: 54.5ms
  • 향상된 함수: 47.1ms
  • 정규식: 294.4 ms

정규 표현식 대안

정규 표현식도 이 작업에 사용할 수 있지만 단순한 문자열 조작보다 훨씬 느립니다. 예는 다음과 같습니다.

public static string RemoveSpecialCharactersRegex(string str) {
   return Regex.Replace(str, @"[^0-9a-zA-Z\._]", "");
}

조회 테이블 최적화

또 다른 효율적인 솔루션은 허용되는 문자에 대한 조회 테이블을 만드는 것입니다.

private static bool[] _lookup;

static Program() {
   _lookup = new bool[65536];
   for (char c = '0'; c <= '9'; c++) _lookup[c] = true;
   for (char c = 'A'; c <= 'Z'; c++) _lookup[c] = true;
   for (char c = 'a'; c <= 'z'; c++) _lookup[c] = true;
   _lookup['.'] = true;
   _lookup['_'] = true;
}

public static string RemoveSpecialCharactersLookup(string str) {
   char[] buffer = new char[str.Length];
   int index = 0;
   foreach (char c in str) {
      if (_lookup[c]) {
         buffer[index] = c;
         index++;
      }
   }
   return new string(buffer, 0, index);
}

이것은 접근 방식은 실행 속도 측면에서 원래 방법과 개선된 방법 모두를 능가하지만 대규모 초기화 및 유지 관리 비용이 발생합니다. 메모리에 조회 테이블이 있습니다.

위 내용은 C#의 문자열에서 특수 문자를 가장 효율적으로 제거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.