8

次のような入力文字列があります。

thumb_634735515600845357tchayat_november_200612.jpg

私がやりたいことは、最初にこの文字列を で分割_することです。そして、結果のトークンを位置 1 から n に取り、それらを結合します。

具体的には、サンプル入力に関して、ここに私の目的の出力があります。ご覧のとおりthumb_、文字列の前部から削除されています。

634735515600845357tchayat_november_200612.jpg

分割の仕方が分かりました。しかし、その後の結合ステップはどのようにすればよいのでしょうか? forループを使用して結合できることを認識しています。しかし、より良い方法はありますか?前にデータがあるため、部分文字列アプローチを使用して結合ステップを実行できませんthumb_

_最後に、後続の文字thumbは常に の最初のインスタンスであることに注意してください_

4

6 に答える 6

11

親指の_後ろは常に最初のインスタンスであるSubstringため、 と組み合わせて完全に実行可能である必要がありますIndexOf

string newString = myString.Substring(myString.IndexOf("_") + 1);

これは、文字の最初のインスタンスの直後の文字から始まる部分文字列を取る必要があります_

の2 番目のインデックスを取得する場合は、次の方法_をお勧めします。

int first = myString.IndexOf("_");
int second = mystring.Substring(first).IndexOf("_");

「文字列の n 番目の出現のインデックスは?」という質問に対するJon Skeetによるこの回答を参照してください。このアプローチのサポートのために。

于 2012-06-14T01:58:21.970 に答える
7

indexOf が気に入らず、代わりに Join が必要な場合:

String.Join("_",
   "thumb_634735515600845357tchayat_november_200612.jpg"
   .Split('_')
   .Skip(1)
   .ToArray())
于 2012-06-14T01:58:36.783 に答える
2

分割して並べ替えた後、 Join メソッドを使用できます。

string new_value=String.Join("",your_array);
于 2012-06-14T02:01:21.507 に答える
0

を使用できますString.Joinが、実際には内部でループを使用しています。

String.Join("_", "thumb_634735515600845357tchayat_november_200612.jpg".Split('_').Skip(1).ToArray());
于 2012-06-14T02:03:28.730 に答える
0

UserRoles は文字列のリストです。

string.Join(",", userRoles.ToArray());
于 2014-10-06T07:21:44.833 に答える
0

元の投稿は 2015 年 8 月 31 日でした。変更したのはマークアップの構文だけです。元のものが間違っていたためです。

正規表現の使用は非常に役立ちます。

using System.Text.RegularExpressions;

string itemName = "thumb_634735515600845357tchayat_november_200612.jpg";
itemName = Regex.Match(itemName, @"(?<=(_)).*$").Value;

「(?<=(_))」は、最初の「_」の後ろに見えます。出発点と考えてください。「.*$」は、行の始点から終点までのすべてを取得します。「$」は行末を表します。

于 2015-08-28T19:03:16.657 に答える