web-dev-qa-db-ja.com

文字列をC#の別の文字列で分割する

私はSplit()メソッドを使って文字列を分割してきましたが、これは文字列を文字で分割している場合にのみうまくいくようです。別の文字列をパラメータで分割することで、stringを分割する方法はありますか?

幸運なことに、スプリッタを文字配列に変換してみました。

言い換えれば、私はstringを分割したいのです。

THExxQUICKxxBROWNxxFOX

xxを指定して、値を含む配列を返します。

THE、QUICK、BROWN、FOX

580
Brandon

文字列で分割するには、 文字列配列のオーバーロード を使用する必要があります。

string data = "THExxQUICKxxBROWNxxFOX";

return data.Split(new string[] { "xx" }, StringSplitOptions.None);
1057
Adam Robinson

分割のオーバーロードがあります それは文字列を取ります。

"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);

あなたはこれらのStringSplitOptionsのどちらかを使うことができます

  • なし - 戻り値に空の文字列を含む配列要素が含まれる
  • RemoveEmptyEntries - 戻り値に空の文字列を含む配列要素は含まれません

そのため、文字列が "THExxQUICKxxxxBROWNxxFOX"の場合、StringSplitOptions.Noneは配列内の "xxxx"部分の空のエントリを返しますが、StringSplitOptions.RemoveEmptyEntriesは返しません。

104
Greg
Regex.Split(string, "xx")

私が普通にやる方法です。もちろん必要です

using System.Text.RegularExpressions;

しかし、それでも私は常にそのライブラリが必要です。

59
Peter

String.Split のオーバーロードがあります。

"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
41
bruno conde

私は一般的に私自身の拡張子を使うのが好きです。

string data = "THExxQUICKxxBROWNxxFOX";
var dataspt = data.Split("xx");
//>THE  QUICK  BROWN  FOX 


//the extension class must be declared as static
public static class StringExtension
{   
    public static string[] Split(this string str, string splitter)
    {
        return str.Split(new[] { splitter }, StringSplitOptions.None);
    }
}

ただし、Microsoftが今後のバージョンでこのメソッドオーバーロードを含めることを決定した場合は、例外が発生します。マイクロソフトがこの方法を当面の間含めなかったのも、おそらくこのような理由によるものです。私が働いていた少なくとも1社が、すべてのC#プロジェクトでそのような拡張を使用していました。

メソッドが存在しない場合は、実行時に条件付きでメソッドを定義することも可能です。

21
Lorenz Lo Sauer

前の答えはすべて正しいです。さらに一歩進んで、Stringに拡張メソッドを定義することでC#を機能させます。

public static string[] Split(this string toSplit, string splitOn) {
    return toSplit.Split(new string[] { splitOn }, StringSplitOptions.None);
}

そのようにして私はこれを達成しようとした最初の時に素朴に期待した簡単な方法で任意の文字列でそれを呼び出すことができます:

"a big long string with stuff to split on".Split("g str");
7
argyle
string data = "THExxQUICKxxBROWNxxFOX";

return data.Replace("xx","|").Split('|');

置換文字を慎重に選択してください(すでに文字列に存在しない可能性が高いものを選択してください)。

5
SNag

これも簡単です。

string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
1
user890255

.NET Core 2.0以降では、文字列を受け取るオーバーライドがあります。

これで"THExxQUICKxxBROWNxxFOX".Split("xx")を実行できます。

https://docs.Microsoft.com/ja-jp/dotnet/api/system.string.split?view=netcore-2.0#System_String_Split_System_String_System_StringSplitOptions_ を参照してください。

0
Danation