String.Split은 구분 기호에 여러 부분으로 문자열을 분할하는 데 편리합니다.
첫 번째 구분 기호에서만 문자열을 분할하려면 어떻게해야합니까? 예 : 문자열이 있습니다
"Time: 10:12:12\r\n"
그리고 나는 다음과 같은 배열을 원합니다.
{"Time","10:12:12\r\n"}
답변
최선의 접근 방식은 가능한 추가 공간 등과 관련하여 구문 분석이 얼마나 유연하기를 원하는지에 따라 약간 다릅니다. 필요한 내용을 보려면 정확한 형식 사양을 확인하십시오.
yourString.Split(new char[] { ':' }, 2)
두 개의 2 개의 하위 문자열을 제한합니다. 그러나 이것은 두 번째 문자열의 시작 부분에있는 공백을 자르지 않습니다. 그러나 분할 후 두 번째 작업에서이를 수행 할 수 있습니다.
yourString.Split(new char[] { ':', ' ' }, 2,
StringSplitOptions.RemoveEmptyEntries)
작동하지만 공백이 포함 된 헤더 이름을 분할하려고하면 중단됩니다.
yourString.Split(new string[] { ": " }, 2,
StringSplitOptions.None);
설명하는대로 정확하게 수행하지만 실제로는 공간이 있어야합니다.
yourString.Split(new string[] { ": ", ":" }, 2,
StringSplitOptions.None);
공간을 선택 사항으로 만들지 만 TrimStart()
둘 이상의 공간이있는 경우에는 여전히 필요 합니다.
형식을 다소 유연하게 유지하고 코드를 읽기 쉽게하려면 첫 번째 옵션을 사용하는 것이 좋습니다.
string[] split = yourString.Split(new char[] { ':' }, 2);
// Optionally check split.Length here
split[1] = split[1].TrimStart();
답변
위의 예에서 “:”(즉, 후행 공백이있는 콜론)으로 분할 할 수 있습니다. 실제로 첫 번째 구분선 만 분할 한 경우 두 번째 배열 요소에 선행 공백이 표시됩니다.
그러나이 Split의 과부하를 살펴 봐야합니다.
http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx
public string[] Split(
char[] separator,
int count
)
… 최대 하위 문자열 수를 지정할 수 있습니다.
답변
?("Time: 10:12:12\r\n").Split(new char[] { ':', ' ' }, 2,
StringSplitOptions.RemoveEmptyEntries)
{Dimensions:[2]}
[0]: "Time"
[1]: "10:12:12\r\n"
다른 옵션:
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 2)
{Dimensions:[2]}
[0]: "Time"
[1]: " 10:12:12\r\n"
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 1)
{Dimensions:[1]}
[0]: "Time: 10:12:12\r\n"
?("Time: 10:12:12\r\n").Split(new char[] { ':' }, 3)
{Dimensions:[3]}
[0]: "Time"
[1]: " 10"
[2]: "12:12\r\n"
답변
위의 Thorarin의 답변에 대한 변형을 채택했습니다. 아래는 귀하의 요구 사항을 처리하고 공간을 다듬을 수 있어야합니다.
yourString.Split(new []{'-'},2).Select(s => s.Trim())