web-dev-qa-db-ja.com

文字列の最後の文字を削除

私はデータベースにリンクされたリストからたくさんの情報を検索しています、そして私はウェブサイトに接続されている誰かのために、グループのストリングを作成したいです。

私はこれを使ってテストしますが、これは動的ではないので、本当に悪いことです。

string strgroupids = "6";

今すぐ使いたいです。しかし、返される文字列は1,2,3,4,5,のようなものです。

groupIds.ForEach((g) =>
{
    strgroupids = strgroupids  + g.ToString() + ",";
    strgroupids.TrimEnd(',');
});

strgroupids.TrimEnd(new char[] { ',' });

,の後に5を削除したいのですが、うまくいきません。

223
Kiwimoisi
strgroupids = strgroupids.Remove(strgroupids.Length - 1);

MSDN:

String.Remove(Int32):

この文字列から、指定された位置から最後の位置までのすべての文字を削除します。

530
sll

このようにすることについてはどうですか

strgroupids = string.Join( ",", groupIds );

ロット クリーナー。

groupIds内のすべての要素の間に','を追加しますが、末尾に','を配置しません。

75

C#の文字列は不変です。コード内でstrgroupids.TrimEnd(',');またはstrgroupids.TrimEnd(new char[] { ',' });を実行すると、strgroupids文字列 は変更されません

代わりにstrgroupids = strgroupids.TrimEnd(',');のようなことをする必要があります。

ここ から引用するには:

文字列は不変です。文字列オブジェクトの内容は、作成後に変更することはできません。ただし、構文上、文字列オブジェクトの内容は変更できるように見えます。たとえば、このコードを書くと、コンパイラは実際に新しい文字列を保持する新しい文字列オブジェクトを作成し、その新しいオブジェクトがbに代入されます。文字列 "h"はガベージコレクションに適しています。

24
Andy Johnson

拡張メソッドを追加してください。

public static string RemoveLast(this string text, string character)
{
    if(text.Length < 1) return text;
    return text.Remove(text.ToString().LastIndexOf(character), character.Length);
}

それから:

yourString.RemoveLast(",");
9
nznoor

末尾のカンマを削除します。

while (strgroupids.EndsWith(","))
    strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

これは逆ですが、あなたは最初の場所にコンマを追加するコードを書きました。 gstring[]であると仮定して、代わりにstring.Join(",",g)を使用してください。 gよりも良い名前を付けてください。

6
string strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    strgroupids = strgroupids + g.ToString() + ",";
});

strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

ここでのForEachの使用は通常「間違っている」と考えられていることに注意してください(例えば http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx を読んでください) )

いくつかのLINQを使う:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => p + q + ',');
strgroupids = strgroupids.Substring(0, str1.Length - 1);

終了部分文字列なし

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));
3
xanatos

各項目にコンマを追加する代わりに、String.Joinを使用することもできます。

var strgroupids = String.Join(",",  groupIds);

これにより、配列内の各要素に区切り文字(この例では "、")between _が追加されます。

3
Gary.S

Sllの解決策に追加:末尾に空白がある場合に備えて文字列を削除することをお勧めします。

strgroupids = strgroupids.Remove(strgroupids.Trim().Length - 1);
1
tanzer

string.Joinの方が優れていますが、もしあなたが 本当に LINQ ForEachを欲しければ:

var strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    if(strgroupids != string.Empty){
        strgroupids += ",";
    }

    strgroupids += g;
});

いくつかのメモ:

  • string.Joinforeachはどちらもこれより優れていますが、非常に遅いアプローチです。
  • 最後の,は追加されないので削除する必要はありません
  • 増分演算子(+=)は文字列に追加するのに便利です。
  • .ToString()は、文字列以外を連結するときに自動的に呼び出されるので不要です。
  • 大きな文字列を扱うときは、文字列を連結する代わりにStringBuilderを考慮する必要があります。
1
user3638471