C에서 문자열을 부분 문자열로 분할#

팁 (조언)

이 문서는 이미 하나 이상의 프로그래밍 언어를 알고 있으며 C#을 학습하는 개발자를 위한 기본 사항 섹션의 일부입니다. 프로그래밍을 처음 접하는 경우 먼저 시작 자습서로 시작 하세요.

다른 언어를 사용해 오셨나요?string.Split는 Java의 String.split 및 JavaScript의 String.prototype.split에 해당하는 C#의 대응물입니다. 이러한 언어와 달리 C#은 목록이 아닌 배열(string[])을 반환하며 구분 기호 인수는 정규식이 아닌 문자 또는 문자열입니다. 패턴 기반 분할은 다음을 참조하세요 Regex.Split.

이 메서드는 String.Split 하나 이상의 구분 기호를 사용하여 문자열을 부분 문자열 배열로 분리합니다. 단어, CSV 스타일 값 또는 프로토콜 토큰과 같은 구분된 텍스트를 구문 분석하는 가장 간단한 방법입니다.

이 메서드에는 많은 오버로드가 있지만 다음 네 가지 독립적인 결정을 다룹니다.

  • 구분자: char 1개, char 배열, string 1개 또는 string 배열.
  • 최대 결과 수: 반환된 부분 문자열 수를 제한합니다.
  • 빈 항목 처리: 빈 부분 문자열은 유지하거나(기본값) StringSplitOptions.RemoveEmptyEntries로 삭제합니다.
  • 공백 처리: 각 항목에서 선행 및 후행 공백을 트리밍합니다 StringSplitOptions.TrimEntries.

문자열을 단어로 분할

문구를 공백을 기준으로 분리하려면 구분 기호로 ' '를 전달합니다.

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox>
// => <jumps>
// => <over>
// => <the>
// => <lazy>
// => <dog.>

반환된 배열 for 을 반복하여 각 단어의 위치를 복구합니다.

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');

for (int i = 0; i < words.Length; i++)
{
    Console.WriteLine($"Index {i}: <{words[i]}>");
}
// => Index 0: <The>
// => Index 1: <quick>
// => Index 2: <brown>
// => ...

입력에 구분 기호 문자의 반복 인스턴스가 포함된 경우 연속 구분 기호 Split 사이의 각 "간격"에 대해 하나씩 빈 항목을 생성합니다.

string phrase = "The quick brown    fox     jumps over the lazy dog.";
string[] words = phrase.Split(' ');

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// The runs of spaces produce empty entries:
// => <The>
// => <quick>
// => <brown>
// => <>
// => <>
// => <>
// => <fox>
// => ...

이 문서의 뒷부분에 나와 있듯이, 빈 항목을 제거하려면 StringSplitOptions.RemoveEmptyEntries를 전달하세요.

여러 구분 기호로 분할

둘 이상의 문자가 구분 기호로 작동할 수 있는 경우 배열로 전달합니다. 다음 예제에서는 공백, 쉼표, 마침표, 콜론 및 탭을 모두 단어 경계로 처리합니다.

char[] delimiters = [' ', ',', '.', ':', '\t'];

string text = "one\ttwo three:four,five six seven";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <three>
// => <four>
// => <five>
// => <six>
// => <seven>

인접한 구분 기호는 여전히 빈 항목을 생성합니다.

char[] delimiters = [' ', ',', '.', ':', '\t'];

string text = "one\ttwo :,five six seven";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <>
// => <>
// => <five>
// => <six>
// => <seven>

여러 문자 구분 기호를 기준으로 분할

전체 단어 또는 다문자 구분 기호로 분할하려면 문자열 배열을 전달합니다. 문자열 배열 오버로드에는 값이 StringSplitOptions 필요합니다. 구분자가 연속으로 반복될 때 그렇지 않으면 빈 결과가 생성되는 경우 RemoveEmptyEntries를 사용합니다.

string[] separators = ["<<", "..."];

string text = "one<<two......three<four";
Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(separators, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{words.Length} substrings in text:");

foreach (var word in words)
{
    Console.WriteLine(word);
}
// => 3 substrings in text:
// => one
// => two
// => three<four

반환되는 부분 문자열 개수를 제한합니다

인수를 count 전달하여 결과 수를 제한합니다. 마지막 항목은 나머지 구분 기호를 포함하여 남은 모든 항목을 포함합니다.

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ', 4, StringSplitOptions.None);

foreach (var word in words)
{
    Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox jumps over the lazy dog.>

이 패턴은 첫 번째 구분 기호만 의미가 있는 쌍 및 기타 형식에 유용합니다 key=value .

각 항목에서 공백 자르기

StringSplitOptions.TrimEntries 는 반환된 모든 부분 문자열에서 선행 및 후행 공백을 제거합니다. 일반적인 CSV 스타일 정리를 위해 RemoveEmptyEntries와 결합할 수 있습니다:

string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] trimmed = numerals.Split(',', StringSplitOptions.TrimEntries);

Console.WriteLine("Trimmed entries:");
foreach (var word in trimmed)
{
    Console.WriteLine($"<{word}>");
}

string[] untrimmed = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in untrimmed)
{
    Console.WriteLine($"<{word}>");
}
// => Trimmed entries: <1> <2> ... <10>
// => Untrimmed entries: <1> < 2> ... < 10>

정규식 사용

Split 는 고정 문자 또는 문자열 구분 기호에 적합합니다. 패턴 기반 분할에는 Regex.Split을 사용하세요. 문자열의 정규식에 대한 소개는 문자열 작업을 참조하세요.

참고하십시오