1. ホーム
  2. c#

C#でString.Splitは最初のセパレータにのみ適用される?

2023-07-29 15:11:14

質問

String.Splitは、文字列を区切り記号で複数に分割するのに便利です。

最初のデリミタだけで文字列を分割するにはどうしたらよいでしょうか。例)文字列を

"Time: 10:12:12\r\n"

そして、次のような配列にしたい。

{"Time","10:12:12\r\n"}

どのように解決するのですか?

最適な方法は、可能な余分なスペースなどについて、解析にどの程度の柔軟性を持たせたいかに少し依存します。何が必要かを確認するために、正確なフォーマットの仕様をチェックしてください。

yourString.Split(new char[] { ':' }, 2)

は、2つの部分文字列を制限します。しかし、これは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();