[C#] String에서 공백을 지정하는 가장 좋은 방법입니다.

다음과 같이 공백을 기준으로 문자열을 분할합니다.

string myStr = "The quick brown fox jumps over the lazy dog";

char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);

내 코드의 모든 곳에서 char [] 배열을 정의하는 것은 성가신 일입니다. 문자 배열을 만들 필요가없는보다 효율적인 방법이 있습니까 (다른 장소에서 복사하면 오류가 발생하기 쉽습니다)?



답변

방금 전화하면 :

string[] ssize = myStr.Split(null);

또는:

string[] ssize = myStr.Split(new char[0]);

공백 문자는 분할 문자로 간주됩니다. 보내는 사람 string.Split(char[])방법의 설명서 페이지 .

separator 매개 변수가 null문자를 포함하거나 포함하지 않으면 공백 문자는 분리 문자로 간주됩니다. 공백 문자는 유니 코드 표준으로 정의되며 메소드에 true전달되면 리턴 됩니다 Char.IsWhiteSpace.

항상, 항상, 항상 설명서를 읽으십시오!


답변

예, 여기에 하나 더 답변이 필요합니다!

모든 용액은 지금까지의 다소 제한 도메인 주소 정규 입력 A : 재치에, 단일 공백 문자 요소 (모자 팁이 적어도 문제를 언급하기 위해 @cherno하지만). 그러나 나는 모든하지만 가장 모호한 상황에서, 모든 이들의 분할이 있음을 제출 해야 동일한 결과를 얻을 :

string myStrA = "The quick brown fox jumps over the lazy dog";
string myStrB = "The  quick  brown  fox  jumps  over  the  lazy  dog";
string myStrC = "The quick brown fox      jumps over the lazy dog";
string myStrD = "   The quick brown fox jumps over the lazy dog";

String.Split(여기서 다른 답변 전체에 표시된 맛 RemoveEmptyEntries중 하나)은 다음 중 하나 를 사용하여 옵션 을 첨부하지 않으면 제대로 작동하지 않습니다 .

myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)

그림에서 알 수 있듯이 옵션을 생략하면 네 가지 다른 결과 (A, B, C 및 D로 표시)와 네 가지 입력 모두에서 단일 결과를 얻을 수 있습니다 RemoveEmptyEntries.

String.Split 대 Regex.Split

물론 옵션 사용을 좋아하지 않는다면 정규식 대안을 사용하십시오 🙂

Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)


답변

설명서 에 따르면 :

separator 매개 변수가 널이거나 문자를 포함하지 않으면 공백 문자가 분리 문자로 간주됩니다. 공백 문자는 유니 코드 표준으로 정의되며 Char.IsWhiteSpace 메서드에 전달되면 true를 반환합니다.

그러니 그냥 전화 myStr.Split();때문에 아무것도 통과 할 필요가 없습니다 구분 A는 params배열.


답변

왜 사용하지 않습니까? :

string[] ssizes = myStr.Split(' ', '\t');


답변

인접한 공백은 사용하는 경우에도 단일 구분 기호로 취급되지 않습니다. String.Split(null) . 토큰 중 하나가 여러 공백 또는 탭으로 분리 된 경우 배열에 빈 문자열이 반환됩니다.

설명서에서 :

구분 기호의 각 요소는 별도의 구분 문자를 정의합니다. 두 개의 분리 문자가 인접하거나이 인스턴스의 시작 또는 끝에 분리 문자가있는 경우 해당 배열 요소는 Empty를 포함합니다.


답변

따라서 복사하여 붙여 넣지 마십시오! 분할을 수행하고 재사용 할 함수를 추출하십시오.

public static string[] SplitWhitespace (string input)
{
    char[] whitespace = new char[] { ' ', '\t' };
    return input.Split(whitespace);
}

코드 재사용은 당신의 친구입니다.


답변

왜 이러면 안 되나요?

var ssizes = myStr.Split(" \t".ToCharArray());

String.ToCharArray().NET 4.0 에는 방법이있는 것 같습니다 !

편집 : VMAtm이 지적 했듯이이 방법은 .NET 2.0에 이미 존재합니다!