[c#] C #의 첫 번째 구분자에만 String.Split?

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())


답변