>백엔드 개발 >C++ >문자열에서 대문자 앞에 공백을 효율적으로 삽입하는 방법은 무엇입니까?

문자열에서 대문자 앞에 공백을 효율적으로 삽입하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-29 21:21:15805검색

How to Efficiently Insert Spaces Before Uppercase Letters in a String?

대/소문자 전환에 공백 삽입

목표는 "ThisStringHasNoSpacesButItDoesHaveCapitals"와 같은 문자열을 "This String Has No Spaces But It Does"로 변환하는 것입니다. 대문자 앞에 공백을 추가하여 대문자 있음"

정규식 접근법

정규 표현식은 실제로 이러한 목적으로 사용될 수 있습니다. 정규식 "[A-Z]"는 대문자를 식별하고 " $0"은 각 일치 항목 앞에 공백을 추가합니다.

System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", " <pre class="brush:php;toolbar:false">string AddSpacesToSentence(string text, bool preserveAcronyms)
{
  if (string.IsNullOrWhiteSpace(text))
     return string.Empty;
  StringBuilder newText = new StringBuilder(text.Length * 2);
  newText.Append(text[0]);
  for (int i = 1; i < text.Length; i++)
  {
    if (char.IsUpper(text[i]))
      if ((text[i - 1] != ' ' && !char.IsUpper(text[i - 1])) ||
          (preserveAcronyms && char.IsUpper(text[i - 1]) &&
           i < text.Length - 1 && !char.IsUpper(text[i + 1])))
        newText.Append(' ');
    newText.Append(text[i]);
  }
  return newText.ToString();
}
")

그러나 정규식은 계산 비용이 많이 들고 복잡한 패턴의 경우 읽기가 어려울 수 있습니다.

반복 접근 방식

대안 접근 방식은 문자열을 반복하는 것입니다. 문자별:

이 함수는 소문자에서 대문자로의 전환을 확인하고 선택적으로 약어를 처리합니다.

성능 비교

성능 -반복적 접근 방식은 정규식 접근 방식보다 훨씬 뛰어나며 92.4%를 나타냅니다. 1,000개의 연속된 대문자로 구성된 문자열의 실행 시간이 단축됩니다. 속도를 위해 코드 단순성을 절충합니다.

결국 이러한 접근 방식 중 선택은 각 프로젝트의 특정 성능 및 가독성 요구 사항에 따라 달라집니다.

위 내용은 문자열에서 대문자 앞에 공백을 효율적으로 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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