C #에서 문자열을 여러 문자 구분 기호로 어떻게 분할합니까?


232

단어 인 구분자를 사용하여 문자열을 분할하려면 어떻게해야합니까?

예를 들면 다음과 같습니다 This is a sentence.

나는에 분할 할 is얻을 Thisa sentence.

에서 Java, 나는 구분 기호로 문자열에 보낼 수 있지만 어떻게이에 달성합니까 C#?

답변:


281

http://msdn.microsoft.com/en-us/library/system.string.split.aspx

문서의 예 :

string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
string[] stringSeparators = new string[] {"[stop]"};
string[] result;

// ...
result = source.Split(stringSeparators, StringSplitOptions.None);

foreach (string s in result)
{
    Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
}

7
이것은 실제로 질문에 주어진 예제와 함께 'Th' '' '문장'을 반환합니다. 아마도 이것은 그가 실제로 원하는 것이지만, 그가 지정한 것이 아닙니다.
IRBMe

6
이것은 단지 예입니다 ... 요점은 다음과 같습니다. 문자열을 구분 기호로 사용하는 String.Split이 있습니다.
bruno conde

1
예, 그러나 질문에서 지정한 것을 수행하지 않습니다. 출력을 지정하려면 좀 더 영리한 것을 사용해야합니다. 이제 지정된 질문이 실제로 asker 가 원하는 것인지 여부 는 다른 질문이지만 여기에서 묻는 질문은 String.Split으로 간단하게 대답 할 수 없습니다.
IRBMe

3
여전히 작동하지 않습니다. 분리 할 단어에 공백을 포함하면 공백이 출력에 포함되지 않습니다. 질문에 주어진 예를 살펴보면 실제로 공백이 포함되어 있음을 알 수 있습니다. "를"로 나누면 "This"와 "문장"이 아니라 "This"와 "문장"이됩니다. "This"의 끝과 "문장"의 시작 부분에 미묘한 공백이 있습니다. 다시 말하지만,이 대답은 아마도 질문자가 실제로 원하는 것이지만, 그가 요구 한 것이 아니며 String.Split 은 사소하게 해결하지 않을 것입니다.
IRBMe

2
@IRBMe 질문을 읽었습니까? ‘is’로 나누고 싶습니다. 그래서 "This"와 "문장"을 얻을 것입니다. 결과에서 공백을 보시겠습니까 ??? 이것이 스 플리트가하는 일입니다.
bruno conde

55

Regex.Split 메소드를 다음과 같이 사용할 수 있습니다 .

Regex regex = new Regex(@"\bis\b");
string[] substrings = regex.Split("This is a sentence");

foreach (string match in substrings)
{
   Console.WriteLine("'{0}'", match);
}

편집 : 이것은 당신이 준 예제를 만족시킵니다. 일반 String.Split 도 "This"라는 단어의 끝에 " is "로 분할 되므로 Regex 메서드를 사용 하고 " is " 주위에 단어 경계를 포함시킨 이유는 무엇입니까? 그러나이 예제를 실수로 작성했다면 String.Split 이 충분할 것입니다.


@ 편집 : 확실하지는 않지만 "is"라는 단어 만 제거하는 경우 일반 문자열 분리를 사용하고 양쪽에 공백을 채울 수 있습니다.
ahawker

1
문자열에서 분리 된 단어의 위치를 ​​모르면 공간이 왼쪽, 오른쪽 또는 둘 다에 있어야하는지 알지 못하기 때문에 (적어도 더 많은 노력 없이는) 작동하지 않습니다. .
IRBMe

String.Splity를 사용하면 이미 문자열을 분할 할 수 있습니다.
Ed S.

3
나는 이미 내 답변에 대한 편집, 위의 의견 및 다른 답변에 대한 3 개의 의견 으로이 문제를 해결했습니다. 질문에 제공된 예제에서는 String.Split 이 작동하지 않습니다. 나는 왜 그런지 설명하면서 다시 반복하지 않을 것이다. 알고 싶다면 다른 모든 의견을 읽을 수 있습니다.
IRBMe

정규식 split 메소드는 변수에서 사전 구분 기호와 후행 구분 기호를 제거하지 않습니다 ... :(
melaos

34

이 게시물에 대한 기존 응답을 기반으로 구현을 단순화합니다. :)

namespace System
{
    public static class BaseTypesExtensions
    {
        /// <summary>
        /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator
        /// </summary>
        /// <param name="s"></param>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public static string[] Split(this string s, string separator)
        {
            return s.Split(new string[] { separator }, StringSplitOptions.None);
        }


    }
}

9
+1, 이것은 확장 방법을 위해 비명을 지른다. 이것이 내장 된 과부하 중 하나가 아니라는 것은 거의 바보입니다.
Todd Menier

9
@ToddMenier "거의"무엇을 의미합니까?
mwardm

28
string s = "This is a sentence.";
string[] res = s.Split(new string[]{ " is " }, StringSplitOptions.None);

for(int i=0; i<res.length; i++)
    Console.Write(res[i]);

편집 : "is"는 문장에서 "is"라는 단어 제거하고 "this"라는 단어는 그대로 유지 한다는 사실을 유지하기 위해 배열의 공백으로 양쪽에 채워집니다 .


8

간단히 말해 :

string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None);

5

String.Replace ()를 사용하여 원하는 분할 문자열을 문자열에서 발생하지 않는 문자로 바꾼 다음 해당 문자에서 String.Split을 사용하여 동일한 결과를 위해 결과 문자열을 분할 할 수 있습니다.


5

또는이 코드를 사용하십시오. (동일 함 : 새로운 문자열 [])

.Split(new[] { "Test Test" }, StringSplitOptions.None)

3

다음은 문자열 구분 기호로 분할을 수행하는 확장 함수입니다.

public static string[] Split(this string value, string seperator)
{
    return value.Split(new string[] { seperator }, StringSplitOptions.None);
}

사용 예 :

string mystring = "one[split on me]two[split on me]three[split on me]four";
var splitStrings = mystring.Split("[split on me]");

0
var dict = File.ReadLines("test.txt")
               .Where(line => !string.IsNullOrWhitespace(line))
               .Select(line => line.Split(new char[] { '=' }, 2, 0))
               .ToDictionary(parts => parts[0], parts => parts[1]);


or 

    enter code here

line="to=xxx@gmail.com=yyy@yahoo.co.in";
string[] tokens = line.Split(new char[] { '=' }, 2, 0);

ans:
tokens[0]=to
token[1]=xxx@gmail.com=yyy@yahoo.co.in

-5
string strData = "This is much easier"
int intDelimiterIndx = strData.IndexOf("is");
int intDelimiterLength = "is".Length;
str1 = strData.Substring(0, intDelimiterIndx);
str2 = strData.Substring(intDelimiterIndx + intDelimiterLength, strData.Length - (intDelimiterIndx + intDelimiterLength));

19
코드를 게시하기 전에, 아직 지시하지 않는 한 먼저 컴파일러를 통해 코드를 실행 해보십시오. 첫 번째 줄에서 세미콜론이 누락되었으며 str1 & str2가 정의되지 않았습니다. 코드가 실제로 OP가 원하는 방식으로 작동하지 않는다는 것은 말할 것도 없습니다. 이 코드는 이것을 "Th"로 나누고 "훨씬 더 쉽습니다".
mandreko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.