web-dev-qa-db-ja.com

string.TrimEndがstringの最後の文字だけを削除しない理由

以下のような文字列があります

2,44,AAA,BBB,1,0,,,

だから今、私は上記の文字列の最後のカンマのみを削除したいと思います。だから私は出力をしたい

2,44,AAA,BBB,1,0,,

以下のようにTrimeEndを使用することにしました

str.ToString.TrimEnd(',')

しかし、それは0の後のすべてのコンマを削除しました。以下のように出力を取得します

2,44,AAA,BBB,1,0

0の後の3つのカンマをすべて削除するのはなぜですか?文字列の最後の文字を削除するだけです

13
James

0の後の3つのカンマをすべて削除するのはなぜですか?

それが 文書化 のやり方だからです:

戻り値:
trimCharsパラメータ内のすべての文字の出現後に残っている文字列は、現在の文字列の末尾から削除されます。

最後の文字だけを削除したい場合は、次を使用できます。

if (str.EndsWith(","))
{
    str = str.Substring(0, str.Length - 1);
}

または同等に:

if (str.EndsWith(","))
{
    str = str.Remove(str.Length - 1);
}
35
Jon Skeet

それは予想されます。 _String.TrimEnd_配列で指定された一連の文字の末尾のオカレンスallを現在のStringオブジェクトから削除します

TrimEnd(char[] trimChars) メソッドは、現在の文字列から、trimCharsパラメータにあるすべての末尾の文字を削除します。 trimCharsにない最初の文字が文字列の最後で検出されると、トリム操作が停止します

代わりにこれを使用してください:

_str = str.EndsWith(",") ? str.Substring(0, str.Length - 1) : str;
_
4
codingbiz

TrimEnd()はインプレース関数ではありません。結果をstrに再割り当てする必要があります:

str = str.TrimEnd(',')
2
m.r226

あなたはこれを使うことができます:

string s = "2,44,AAA,BBB,1,0,,,";
s = s.Remove(s.Length-1, 1);
2
Vishal