다음과 같이 공백을 기준으로 문자열을 분할합니다.
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
.
물론 옵션 사용을 좋아하지 않는다면 정규식 대안을 사용하십시오 🙂
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에 이미 존재합니다!