이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

String.Split 메서드 (Char[])

 

문자열을 배열 내 문자에 기초하는 하위 문자열로 분할합니다.

네임스페이스:   System
어셈블리:  mscorlib(mscorlib.dll에 있음)

public string[] Split(
	params char[] separator
)

매개 변수

separator
Type: System.Char[]

이 문자열의 부분 문자열을 구분하는 문자 배열, 구분 기호를 포함하지 않는 빈 배열 또는 null입니다.

반환 값

Type: System.String[]

요소에 separator에 있는 하나 이상의 문자로 구분되는 이 인스턴스의 부분 문자열이 포함된 배열입니다. 자세한 내용은 설명 섹션을 참조하세요.

알려진된 문자 집합으로 구분 하는 문자열은 때 사용할 수 있습니다는 Split(Char[]) 메서드 문자열을 부분 문자열로 구분 될 수 있도록 합니다. 부분 문자열을 추출 문자열에서 다른 방법에 대 한 참조는 String.Split에 대 한 대안 섹션.

구분 기호 문자는 반환 된 배열의 요소에 포함 되지 않습니다. 예를 들어, 구분 기호 배열 문자를 포함 하는 경우 "-" 문자열 현재 인스턴스의 값이 "aa bb 참조", 세 개의 요소가 포함 된 배열을 반환 하 고: "aa", "bb" 및 "cc"입니다.

이 인스턴스가 없는 경우에 문자 separator, 반환 된 배열은이 인스턴스를 포함 하는 단일 요소로 구성 됩니다.

각 요소 separator 별도 구분 기호 문자를 정의 합니다. 두 개의 구분 기호는, 인접 한 경우 나이 인스턴스의 끝 부분에는 구분 기호를 찾을 수 반환된 배열에 있는 해당 요소 포함 Empty합니다. 다음은 몇 가지 예입니다.

문자열 값

구분 기호

반환 되는 배열

"42, 12, 19"

새로운 문자 {',', ' '을 (를) (C#)

Char () = {"," c "" c}) (Visual Basic)

{"42", "", "12", "", "19"}

"42..12..19"

새로운 문자 {'. '을 (를) (C#)

Char () = {"." c} (Visual Basic)

{"42", "", "12", "", "19"}

"바나나"

새로운 문자 {'. '을 (를) (C#)

Char () = {"." c} (Visual Basic)

{"바나나"을 (를)

"Darb\nSmarba" (C#)

/ / "Darb" / vbLf / "Smarba" (Visual Basic)

새 Char {} (C#)

Char () = {} (Visual Basic)

{"Darb", "Smarba"}

"Darb\nSmarba" (C#)

/ / "Darb" / vbLf / "Smarba" (Visual Basic)

null(C#)

Nothing(Visual Basic)

{"Darb", "Smarba"}

각 요소 구분 기호는 단일 문자 구성 된 별도 구분 기호를 정의 합니다. 경우는 separator 인수가 null 포함 되지 않은 또는 메서드를 구분 기호로 공백 문자를 처리 합니다. 공백 문자는 유니코드 표준; 정의 반환 true 전달 되는 경우는 Char.IsWhiteSpace 메서드.

하지만이 오버 로드에 대 한 단일 매개 변수 String.Split 문자 배열에는 다음 예제와 같이 단일 문자를 호출할 수 있습니다.

using System;

public class Example
{
   public static void Main()
   {
      String value = "This is a short string.";
      Char delimiter = 's';
      String[] substrings = value.Split(delimiter);
      foreach (var substring in substrings)
         Console.WriteLine(substring);
   }
}
// The example displays the following output:
//     Thi
//      i
//      a
//     hort
//     tring.

때문에 separator 으로 데코레이팅되 어 매개 변수는 ParamArrayAttribute 특성, 컴파일러는 단일 요소 문자 배열로 단일 문자를 해석 합니다. 이 다른 사례 String.Split 포함 하는 오버 로드는 separator parameter; 명시적으로 전달 해야 이러한 오버 로드와 문자 배열은 separator 인수입니다.

Split(Char[]) 의 문자를 하나 이상의 구분 되는이 문자열의 부분 문자열을 추출 하는 메서드는 separator 배열 및 배열 요소와 해당 부분 문자열을 반환 합니다.

Split(Char[]) 서 수 대/소문자 구분 정렬 규칙을 사용 하 여 비교를 수행 하 여 구분 기호에 대 한 메서드를 찾습니다. Word, 문자열 및 서 수 정렬 하는 방법에 대 한 자세한 내용은 참조는 System.Globalization.CompareOptions 열거형입니다.

Split 메서드는 항상 문자열을 부분 문자열로 구분된 된 문자열을 중단 하는 가장 좋은 방법은 없습니다. 구분된 된 문자열의 부분 문자열의 모든 추출 하지 않으려는 경우 또는 구분 기호 문자 집합이 아닌 패턴에 따라 문자열을 구문 분석 하려는 경우 다음과 같은 대안을 고려해.

문자열에 고정된 패턴을 따르지를 추출 하 여 해당 요소를 처리 하는 정규식을 사용할 수 있습니다. 예를 들어, 문자열 형태로 "번호피연산자번호" 사용할 수 있습니다는 정규식 추출 하 고 문자열의 요소를 처리 합니다. 예를 들면 다음과 같습니다.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      String[] expressions = { "16 + 21", "31 * 3", "28 / 3",
                               "42 - 18", "12 * 7",
                               "2, 4, 6, 8" };
      String pattern = @"(\d+)\s+([-+*/])\s+(\d+)";
      foreach (var expression in expressions)
         foreach (Match m in Regex.Matches(expression, pattern)) {
            int value1 = Int32.Parse(m.Groups[1].Value);
            int value2 = Int32.Parse(m.Groups[3].Value);
            switch (m.Groups[2].Value)
            {
               case "+":
                  Console.WriteLine("{0} = {1}", m.Value, value1 + value2);
                  break;
               case "-":
                  Console.WriteLine("{0} = {1}", m.Value, value1 - value2);
                  break;
               case "*":
                  Console.WriteLine("{0} = {1}", m.Value, value1 * value2);
                  break;
               case "/":
                  Console.WriteLine("{0} = {1:N2}", m.Value, value1 / value2);
                  break;
            }
         }
   }
}
// The example displays the following output:
//       16 + 21 = 37
//       31 * 3 = 93
//       28 / 3 = 9.33
//       42 - 18 = 24
//       12 * 7 = 84

정규식 패턴 (\d+)\s+([-+*/])\s+(\d+) 다음과 같이 정의 됩니다.

패턴

설명

(\d+)

하나 이상의 10진수 숫자가 일치하는지 확인합니다. 이 그룹은 첫 번째 캡처링 그룹입니다.

\s+

하나 이상의 공백 문자를 찾습니다.

([-+*/])

일치는 산술 연산자 기호 (+,-, *, 또는 /). 이 그룹은 두 번째 캡처링 그룹입니다.

\s+

하나 이상의 공백 문자를 찾습니다.

(\d+)

하나 이상의 10진수 숫자가 일치하는지 확인합니다. 이 그룹은 세 번째 캡처링 그룹입니다.

또한 고정된 문자 집합을 보다는 패턴을 기반으로 문자열에서 하위 문자열을 추출 하는 정규식을 사용할 수 있습니다. 다음은 이러한 조건 중 하나가 발생 하는 경우 일반적인 시나리오입니다.

  • 하나 이상의 구분 기호 문자 처리 하지 않는 경우 항상에 구분 기호로 String 인스턴스.

  • 순서 및 구분 기호 문자 수는 변수 또는 알 수 없는 합니다.

예를 들어는 Split 때문에 다음 문자열을 분할 메서드를 사용할 수 없습니다 수가 \n (C#에서) 또는 vbCrLf (Visual Basic)의 문자는 변수가 아니며 구분 기호로 항상 제공 하지 않습니다.


[This is captured\ntext.]\n\n[\n[This is more captured text.]\n]
\n[Some more captured text:\n   Option1\n   Option2][Terse text.] 

정규식이이 문자열을 쉽게 다음 예제와 분할할 수 있습니다.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      String input = "[This is captured\ntext.]\n\n[\n" +
                     "[This is more captured text.]\n]\n" +
                     "[Some more captured text:\n   Option1" +
                     "\n   Option2][Terse text.]";
      String pattern = @"\[([^\[\]]+)\]";
      int ctr = 0;
      foreach (Match m in Regex.Matches(input, pattern))
         Console.WriteLine("{0}: {1}", ++ctr, m.Groups[1].Value);
   }
}
// The example displays the following output:
//       1: This is captured
//       text.
//       2: This is more captured text.
//       3: Some more captured text:
//          Option1
//          Option2
//       4: Terse text.

정규식 패턴 \[([^\[\]]+)\] 다음과 같이 정의 됩니다.

패턴

설명

\[

여는 대괄호를 찾습니다.

([^\[\]]+)

하지 않은 중괄호와 닫는 대괄호는 한 번 이상 나타나는 모든 문자를 찾습니다. 이 그룹은 첫 번째 캡처링 그룹입니다.

\]

닫는 대괄호를 찾습니다.

Regex.Split 메서드는 거의 동일 String.Split제외 하 고 고정된 문자 집합 대신 정규식 패턴에 따라 문자열을 분할 합니다. 예를 들어 다음 예제에서는 Regex.Split하이픈과 다른 문자를 조합으로 구분 하는 부분 문자열을 포함 하는 문자열을 분할 하는 메서드.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      String input = "abacus -- alabaster - * - atrium -+- " +
                     "any -*- actual - + - armoir - - alarm";
      String pattern = @"\s-\s?[+*]?\s?-\s";
      String[] elements = Regex.Split(input, pattern);
      foreach (var element in elements)
         Console.WriteLine(element);
   }
}
// The example displays the following output:
//       abacus
//       alabaster
//       atrium
//       any
//       actual
//       armoir
//       alarm

정규식 패턴 \s-\s?[+*]?\s?-\s 다음과 같이 정의 됩니다.

패턴

설명

\s-

하이픈 공백 문자를 찾습니다.

\s?

0 개 이상의 공백 문자를 찾습니다.

[+*]?

중 0 개 또는 1 개 찾습니다는 + 또는 * 문자입니다.

\s?

0 개 이상의 공백 문자를 찾습니다.

-\s

공백 문자로 이어지는 하이픈을 찾습니다.

문자열의 부분 문자열의 모든 원하지 않는 경우에 일치 항목 찾기를 시작 되는 인덱스를 반환 하는 문자열 비교 방법 중 하나를 사용 하는 것이 좋습니다. 호출할 수 있습니다는 Substring 메서드를 원하는 하위 문자열을 추출 합니다. 다음과 같은 문자열 비교 방법

  • IndexOf문자열 인스턴스에서 맨 처음 발견 되는 문자 또는 문자열의 0부터 시작 하는 인덱스를 반환 하는 합니다.

  • IndexOfAny을 문자 배열에 있는 문자 중 첫 번째 요소의 현재 문자열 인스턴스 0부터 시작 하는 인덱스를 반환 하는 합니다.

  • LastIndexOf문자열 인스턴스에서는 문자 또는 문자열의 마지막 항목의 0부터 시작 인덱스를 반환 하는 합니다.

  • LastIndexOfAny현재 문자열 인스턴스에서 문자 배열에 있는 문자 중 마지막 요소의 0 기반 인덱스를 반환 하는 합니다.

다음 예제에서는 IndexOf 메서드를 문자열에서 마침표를 찾습니다. 다음 사용 하 여는 Substring 메서드를 완전 한 문장을 반환 합니다.

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      String value = "This is the first sentence in a string. " +
                     "More sentences will follow. For example, " +
                     "this is the third sentence. This is the " +
                     "fourth. And this is the fifth and final " +
                     "sentence.";
      var sentences = new List<String>();
      int position = 0;
      int start = 0;
      // Extract sentences from the string.
      do {
         position = value.IndexOf('.', start);
         if (position >= 0) {
            sentences.Add(value.Substring(start, position - start + 1).Trim());
            start = position + 1;
         }
      } while (position > 0);

      // Display the sentences.
      foreach (var sentence in sentences)
         Console.WriteLine(sentence);
   }
}
// The example displays the following output:
//       This is the first sentence in a string.
//       More sentences will follow.
//       For example, this is the third sentence.
//       This is the fourth.
//       And this is the fifth and final sentence.

Split 반환 된 배열 개체에 대 한 메모리를 할당 하는 메서드 및 String 각 배열 요소에 대 한 개체입니다. 응용 프로그램에 필요한 성능을 최적화 하는 경우 또는 메모리 할당을 관리 하는 것이 응용 프로그램에서 중요 한 것이 좋습니다를 사용 하 여 IndexOf 또는 IndexOfAny 메서드. 사용할 수 있습니다는 Compare 문자열 내에서 부분 문자열을 찾을 방법입니다.

문자열 구분 기호 문자에서 분할을 사용 하 여는 IndexOf 또는 IndexOfAny 메서드는 문자열에서 구분 기호를 찾으려고 합니다. 문자열에서 구분 기호 문자열을 분할 하려면 사용는 IndexOf 또는 IndexOfAny 메서드 구분 기호 문자열의 첫 번째 문자를 찾습니다. 다음 사용 하 여는 Compare 메서드를 해당 첫 번째 문자 다음 구분 기호 문자열의 나머지 문자는와 같은지 여부를 확인 합니다.

또한 동일한 설정의 문자는 사용에서 여러 문자열을 분리 하 Split 메서드 호출을 단일 배열을 만들고 각 메서드 호출에서 참조 하는 것이 좋습니다. 각 메서드 호출의 추가 오버 헤드가 상당히 감소 합니다.

호출자 참고 사항:

에 .NET Framework 3.5 및 이전 버전을 하는 경우는 Split 메서드에 전달 됩니다는 separatornull 포함 되지 않은 또는 메서드 집합이 약간 다른 문자를 사용 하 여 보다 문자열을 분할는 Trim 메서드는 문자열을 트리밍를 수행 합니다. 에 .NET Framework 4, 두 가지 방법 유니코드 공백 문자의 것과 동일한 집합을 사용 합니다.

다음 예제에는 구분 기호로 공백 및 문장 부호를 처리 하 여 텍스트 블록에서 개별 단어를 추출 하는 방법을 보여 줍니다. 에 전달 된 문자 배열에서 separator 의 매개 변수는 String.Split(Char[]) 방법은 단순히 공백 문자 및 탭 문자와 함께 몇 가지 공통 문장 부호 기호.

using System;

public class SplitTest {
    public static void Main() {

        string words = "This is a list of words, with: a bit of punctuation" +
                       "\tand a tab character.";

        string [] split = words.Split(new Char [] {' ', ',', '.', ':', '\t' });

        foreach (string s in split) {

            if (s.Trim() != "")
                Console.WriteLine(s);
        }
    }
}
// The example displays the following output to the console:
//       This
//       is
//       a
//       list
//       of
//       words
//       with
//       a
//       bit
//       of
//       punctuation
//       and
//       a
//       tab
//       character

유니버설 Windows 플랫폼
8 이후 사용 가능
.NET Framework
1.1 이후 사용 가능
이식 가능한 클래스 라이브러리
이식 가능한 .NET 플랫폼 에서 지원됨
Silverlight
2.0 이후 사용 가능
Windows Phone Silverlight
7.0 이후 사용 가능
Windows Phone
8.1 이후 사용 가능
맨 위로 이동
표시: