programing

문자열에서 문자의 발생 횟수

nasanasas 2020. 8. 31. 07:56
반응형

문자열에서 문자의 발생 횟수


&다음 문자열 과 같은 특정 문자의 발생 횟수를 얻으려고 합니다.

string test = "key1=value1&key2=value2&key3=value3";

위의 테스트 문자열 변수에 2 개의 앰퍼샌드 (&)가 있는지 어떻게 확인합니까?


다음과 같이 할 수 있습니다.

int count = test.Split('&').Length - 1;

또는 LINQ 사용 :

test.Count(x => x == '&');

LINQ모든 것을 할 수 있기 때문에 ... :

string test = "key1=value1&key2=value2&key3=value3";
var count = test.Where(x => x == '&').Count();

또는 원하는 경우 Count조건자를 사용하는 오버로드를 사용할 수 있습니다 .

var count = test.Count(x => x == '&');

가장 간단하고 효율적인 방법은 문자열의 문자를 간단히 반복하는 것입니다.

int cnt = 0;
foreach (char c in test) {
  if (c == '&') cnt++;
}

Linq 확장을 사용하여 더 간단하고 거의 효율적인 버전을 만들 수 있습니다. 약간 더 많은 오버 헤드가 있지만 여전히 놀랍게도 성능 루프에 가깝습니다.

int cnt = test.Count(c => c == '&');

그런 다음 오래된 Replace트릭이 있지만 루핑이 어색하거나 (SQL) 느린 (VBScript) 언어에 더 적합합니다.

int cnt = test.Length - test.Replace("&", "").Length;

왜 정규식을 사용합니까? String구현 IEnumerable<char>하므로 LINQ를 사용할 수 있습니다.

test.Count(c => c == '&')

문자열 예제는 GET의 쿼리 문자열 부분과 유사합니다. 그렇다면 HttpContext가 도움이 될 것입니다.

int numberOfArgs = HttpContext.Current.QueryString.Count;

QueryString으로 수행 할 수있는 작업에 대한 자세한 내용은 NameValueCollection을 참조하십시오.


다음은 모든 답변에서 카운트를 얻는 가장 비효율적 인 방법입니다. 그러나 보너스로 키-값 쌍이 포함 된 사전을 얻을 수 있습니다.

string test = "key1=value1&key2=value2&key3=value3";

var keyValues = Regex.Matches(test, @"([\w\d]+)=([\w\d]+)[&$]*")
                     .Cast<Match>()
                     .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value);

var count = keyValues.Count - 1;

참고 URL : https://stackoverflow.com/questions/10391481/number-of-occurrences-of-a-character-in-a-string

반응형