Split()
文字列を分割する方法を使用してきましたが、これは、文字列を文字で分割している場合にのみ機能するようです。を分割する方法はありstring
ますか?別の文字列がパラメーターで分割されていますか?
私はスプリッターを文字配列に変換しようとしましたが、うまくいきませんでした。
言い換えれば、私は分割したいと思いますstring
:
THExxQUICKxxBROWNxxFOX
でxx
、値の配列を返します。
THE、QUICK、BROWN、FOX
Split()
文字列を分割する方法を使用してきましたが、これは、文字列を文字で分割している場合にのみ機能するようです。を分割する方法はありstring
ますか?別の文字列がパラメーターで分割されていますか?
私はスプリッターを文字配列に変換しようとしましたが、うまくいきませんでした。
言い換えれば、私は分割したいと思いますstring
:
THExxQUICKxxBROWNxxFOX
でxx
、値の配列を返します。
THE、QUICK、BROWN、FOX
回答:
文字列で分割するには、文字列配列のオーバーロードを使用する必要があります。
string data = "THExxQUICKxxBROWNxxFOX";
return data.Split(new string[] { "xx" }, StringSplitOptions.None);
string.Split
。
string[] Split(string pattern)
ません。これは、私が考えることができる最も自然な使用法ですが、まだありません。以前にCを書いたので、配列をcharすることに慣れていますがchar[]
、C#コードでポップアップが表示されるのを嫌います。ストリームレベルからバイトレベルに突然注意を引き付けるためです。C#ライブラリの人たちがSplitメソッドをこのように設計した理由を誰かが知っていますか?正当な理由があれば、ご不便をおかけして申し訳ありません。
data.Split("xx")
ですか?
文字列を受け取るスプリットのオーバーロードがあります。
"THExxQUICKxxBROWNxxFOX".Split(new [] { "xx" }, StringSplitOptions.None);
これらのStringSplitOptionsのいずれかを使用できます
したがって、文字列が「THExxQUICKxxxxBROWNxxFOX」の場合StringSplitOptions.None
、「xxxx」部分の配列に空のエントリが返されますが、返されStringSplitOptions.RemoveEmptyEntries
ません。
Regex.Split(string, "xx")
私がいつもやるやり方です。
もちろん、次のものが必要です。
using System.Text.RegularExpressions;
または:
System.Text.RegularExpressions.Regex.Split(string, "xx")
しかし、それでもまた、そのライブラリは常に必要です。
RegEx.Split
aは単純なものよりもかなりコストがかかることに注意してくださいString.Split
。
Regex.Escape
は、最初に文字列で使用すると、正規表現のメタ文字がエスケープされます。
これにはString.Splitのオーバーロードがあります。
"THExxQUICKxxBROWNxxFOX".Split(new [] {"xx"}, StringSplitOptions.None);
私は一般的にそれのために自分の拡張を使いたいです:
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#プロジェクトで使用していました。
メソッドが存在しない場合は、実行時に条件付きでメソッドを定義することもできます。
params string[] splitter
2番目のパラメーターとして使用し、複数の区切り文字をサポートするnew[] {splitter}
ようsplitter
に変更します。
以前の答えはすべて正しいです。私はさらに一歩進んで、Stringで拡張メソッドを定義することでC#を機能させます。
public static class Extensions
{
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");
.NET Core 2.0以降、文字列を受け取るオーバーライドがあります。
だから今することができます"THExxQUICKxxBROWNxxFOX".Split("xx")
。
https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-2.0#System_String_Split_System_String_System_StringSplitOptions_を参照してください
string data = "THExxQUICKxxBROWNxxFOX";
return data.Replace("xx","|").Split('|');
置換文字を慎重に選択するだけです(既に文字列に含まれている可能性が低い文字を選択してください)。
|
すでに文字が含まれている場合はどうなりますか?このため、使用するのは危険だと思います。
これも簡単です。
string data = "THExxQUICKxxBROWNxxFOX";
string[] arr = data.Split("xx".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
"THExQUICK"
したくない場所でも分割されます
最も簡単な方法は以下を使用することString.Replace
です:
string myString = "THExxQUICKxxBROWNxxFOX";
mystring = mystring.Replace("xx", ", ");
またはもっと簡単に:
string myString = "THExxQUICKxxBROWNxxFOX".Replace("xx", ", ");
xx
'があった場所にコンマを含む文字列だけを返します。