19

文字列をsplit(' ')上書きし、返された文字列の最初の要素をプルして、残りの文字列を取得したいと思います。

fe"THIS IS AN AMAZING STRING".split(' ');

これ以外のすべての単語を取得したい。これは:驚くべき文字列です

文字列はハードコードされているため、最初の単語と2番目の単語の間に常に少なくとも1つの空白があります

これを作る機能はありますか?ありがとうございました

4

6 に答える 6

37

試す

string X = "THIS IS AN AMAZING STRING";
string Y = (X.IndexOf ( " " ) < 0) ? string.Empty : X.Substring (X.IndexOf ( " " )  + 1); // Y = IS AN AMAZING STRING

コメントによると(IFXは少なくとも1つのスペースを持つ有効な文字列であることが保証されています)、チェックなどを行わない単純なバージョン:

string Y = X.Substring (X.IndexOf ( " " )  + 1); 
于 2012-11-12T17:34:43.163 に答える
26

かなり良いオプションは、以下を使用することです。

string original = "THIS IS AN AMAZING STRING";
string[] split = original.Split(new []{' '}, 2);
string result = split[1];

結果の文字列だけが必要な場合は、次のように短くすることができます。

var result = original.Split(new []{' '}, 2)[1];

最大分割数をとるstring.Splitのオーバーロードを使用することにより、結合の必要性と余分なオーバーヘッドを回避できます。

于 2012-11-12T17:37:44.613 に答える
17
var a = "THIS IS AN AMAZING STRING".Split(' ');
string amazing = String.Join(" ", a.Skip(1));

.NET 4より前の場合は、Skip呼び出しの最後に.ToArray()を固定する必要があります。これは、2番目のパラメーターとして列挙可能なString.Joinオーバーロードが.NET4で最初に追加されたためです。

これは一般的なケースではうまく機能しますが、常に最初の単語だけを削除したい場合は、Reedがコメントで指摘しているように、これを行うためのより良い方法があります。

var a = "THIS IS AN AMAZING STRING".Split(new char[] {' ' }, 2);
string amazing = a[1];  //Perhaps do a length check first if you are not sure there is a space in the original string.

Splitは最初のスペースが見つかるまで検索するだけで、2つの文字列のみで結果を作成できるため、これは大きな文字列に対してより優れたパフォーマンスを発揮します。また、特に長い文字列の場合、コストがかかる可能性のあるString.Joinを回避します。

于 2012-11-12T17:33:59.373 に答える
17

Split関数を使用しないでください-a )' '最初のシンボルだけでなく、存在するすべてのシンボルを検索します。b)このアプローチでは、メモリ内で大量のデータをコピーする必要がありますが、これは文字列の操作がかなり遅くなります。

var a = "THIS IS AN AMAZING STRING";
string result;
var index = a.IndexOf(' ');
if (index == -1)
    result = null;
else
    result = a.Substring(index + 1);

質問のタイトルは文字列ではなく配列に言及しているため、ArraySegmentクラスに言及する価値があります。これにより、(新しい配列を作成してデータをコピーすることなく)配列の一部へのポインターを作成できます。

var a = new int[] { 0, 1, 2, 3 };
var segment = new ArraySegment<int>(a, 1, a.Length - 1);
于 2012-11-12T17:35:23.207 に答える
2

非常に簡単に、次のことができます。

string input = "THIS IS AN AMAZING STRING";
string result = input.Substring(input.IndexOf(' ') + 1);

これは、指定している入力のタイプ(文字列の最初の2つの単語の間に常にスペースがある場合)では機能しますが、入力文字列にスペースがまったくない場合は、文字列全体が次のように返されます。は。

于 2012-11-13T07:18:57.640 に答える
0

これを試して

  string str = "THIS IS AN AMAZING STRING";
  string firstString = str.Split(' ')[0];  //get the first string
  string newStr = str.Replace(firstString + " ", "");  //remove the first string

  //OR

  string newStr = str.Remove(0, firstString.Length + 1);
于 2012-11-12T17:36:32.093 に答える