文字列から最後の3文字を削除する


122

文字列から最後の3文字を削除したい:

string myString = "abcdxxx"; 

文字列は動的データであることに注意してください。


1
最後の3文字を読み取る= 1つのこと、最後の3文字を削除する=別のこと。どっち?
Kieren Johnstone

回答:


234

文字列から最後の3文字を読み取る[最初に質問]

string.Substringを使用して開始インデックスを指定すると、指定されたインデックスから終了までの部分文字列が取得されます。

myString.Substring(myString.Length-3)

このインスタンスから部分文字列を取得します。サブストリングは、指定された文字位置から始まります。MSDN

編集、更新された投稿

文字列から最後の3文字を削除[更新された質問]

文字列から最後の3文字を削除するには、string.Substring(Int32、Int32)を使用して、開始インデックス0と終了インデックスに文字列の長さより3小さい値を指定します。最後の3文字の前の部分文字列を取得します。

myString = myString.Substring(0, myString.Length-3);

String.Substringメソッド(Int32、Int32)

このインスタンスから部分文字列を取得します。サブストリングは、指定された文字位置から始まり、指定された長さを持ちます。

String.Remove(Int32)メソッドを使用して、開始インデックスをlength-3として渡すことにより、最後の3文字を削除することもできます。これにより、このポイントから文字列の終わりまで削除されます。

myString = myString.Remove(myString.Length-3)

String.Removeメソッド(Int32)

現在のインスタンスの指定された位置から最後の位置までのすべての文字が削除された新しい文字列を返します


13
これは正解ではありません
2016年

21
@braksに感謝します。最初に尋ねられた質問は「文字列から最後の3文字を読み取る」でした。これは後で編集されたので、知りませんでした。質問の編集履歴を参照してください。あなたのコメントは、質問の編集後に間違った私の答えを修正するのに役立ちました。
Adil


13

私はこれらすべてを読みましたが、もう少しエレガントなものが欲しかったです。文字列の末尾から特定の数の文字を削除するだけです。

string.Concat("hello".Reverse().Skip(3).Reverse());

出力:

"he"

7
これは文字列の長さを必要としないため、非常に「創造的」ですが、逆の操作はおそらくより高価です。
Aleksandar

4
文字列を逆にすることは、文字を数えるよりも明らかにコストがかかります。まったく新しい文字列を作成し、元の文字列をそれにコピーしてから、元の文字列をガベージコレクションする必要があります。
Matt Gregory

@MattGregory文字列は不変です:削除、部分文字列、任意の文字列関数は新しい文字列を生成します。元のポインタを上書きすると、常にガベージコレクションが発生します。ただし、Enumerable.Reverse文字列をにchar[]バッファーし、次にchar[]3短いnewにバッファーし、新しいstring(内部的に別のを含むchar[])を生成するため、これはまだ遅いです。より良い方法はnew string("hello".Reverse().Skip(3))、または、AllBut(this string in, int i)Substringを使用する独自の文字列拡張関数を作成することです。
Wolfzoon、

@MattGregory文字列の文字を「カウント」することすらせず、文字列はLength格納されています。
Wolfzoon、

1
今、私たちも持ってい.SkipLast(n)ます。何も逆にする必要はありません。"hello".SkipLast(3)与える"he"
AjitZero



5

を使用String.Removeして、指定した位置から文字列の末尾までを削除できます。

myString = myString.Remove(myString.Length - 3);

4

「動的データ」だと言っているので、おそらくあなたが探しているものとは正確には違いますが、例の文字列が与えられれば、これも機能します。

? "abcdxxx".TrimEnd('x');
"abc"



2
   string myString = "abcdxxx";
   if (myString.Length<3)
      return;
   string newString=myString.Remove(myString.Length - 3, 3);

1

文字列から最後の文字を削除する

TXTB_DateofReiumbursement.Text = (gvFinance.SelectedRow.FindControl("lblDate_of_Reimbursement") as Label).Text.Remove(10)

.Text.Remove(10)//インデックス10から最後までテキストを削除するために使用されます


1

新しいC#8.0範囲演算子は、これを実現するための優れたショートカットになる可能性があります。

例:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()そのインデックスから最後まですべてのアイテムを削除します。items.length - 3最後からインデックス3文字を取得します


0

簡単です。text = text.remove(text.length - 3)Remove関数がそのインデックスから文字列の末尾までのすべてのアイテムを削除するため、3を減算しました。text.length。したがって、3を減算すると、3文字が削除された文字列が得られます。

これを一般化してa、次のように文字列の末尾から文字を削除できます。

text = text.remove(text.length - a) 

だから私がしたことは同じロジックでした。このremove関数は、テキストの長さである文字列の末尾から内部までのすべてのアイテムを削除します。したがってa、文字列の長さから減算すると、次の文字列が得られますa削除され。

したがって、3に対してのみ機能するわけではありません。ただし、文字列の長さがと等しいかそれ以下の場合を除いて、すべての正の整数に対して機能します。aその場合、負の数または0を返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.