문자열에서 특수 문자를 제거하는 가장 효율적인 방법 찾기
문자열에서 특수 문자를 제거하는 현재 방법은 비효율적으로 보일 수 있지만 실제로 더 효율적인 접근 방식 중 하나입니다. 배열 액세스를 줄이기 위해 로컬 문자 변수나 열거자를 사용하여 최적화할 수 있습니다. 제공된 코드는 다음과 같은 개선 사항을 제공합니다.
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자 문자열에서 각 함수를 백만 번 실행한 다양한 접근 방식의 결과입니다.
정규 표현식 대안
정규 표현식도 이 작업에 사용할 수 있지만 단순한 문자열 조작보다 훨씬 느립니다. 예는 다음과 같습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!