Bir dizeden son üç karakteri kaldırın


122

Bir dizeden son üç karakteri kaldırmak istiyorum:

string myString = "abcdxxx"; 

Dizenin dinamik veri olduğuna dikkat edin.


1
Son 3 karakteri oku = bir şey, son 3 karakteri kaldır = başka. Hangi?
Kieren Johnstone

Yanıtlar:


234

dizeden son 3 karakteri oku [Başlangıçta sorulan soru]

String.Substring'i kullanabilir ve ona başlangıç ​​dizinini verebilirsiniz; o, verilen dizinden başlayarak sonuna kadar alt dizeyi alır.

myString.Substring(myString.Length-3)

Bu örnekten bir alt dizeyi alır. Alt dize, belirtilen bir karakter konumunda başlar. MSDN

Düzenleme güncel yazı için,

Dizeden son 3 karakteri kaldır [Güncellenen soru]

Dizeden son üç karakteri kaldırmak için string.Substring (Int32, Int32) kullanabilir ve ona başlangıç ​​dizini 0ve bitiş dizinini dize uzunluğundan üç daha az olarak verebilirsiniz . Alt dizeyi son üç karakterden önce alır.

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

String.Substring Yöntemi (Int32, Int32)

Bu örnekten bir alt dizeyi alır. Alt dize, belirtilen bir karakter konumunda başlar ve belirli bir uzunluğa sahiptir.

Ayrıca kullanarak yapabilirsiniz String.Remove (Int32) olarak başlangıç indeksi geçirerek son üç karakterleri kaldırmak için yöntem uzunluğu - 3 , bu dizenin sonuna kadar bu noktadan itibaren kaldıracak.

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

String.Remove Yöntemi (Int32)

Belirtilen konumdan başlayıp son konuma kadar devam eden geçerli örnekteki tüm karakterlerin silindiği yeni bir dize döndürür


13
cevap bu değil
frenler

21
Teşekkürler @braks, başlangıçta sorulan soru "dizeden son 3 karakteri oku" idi Bu daha sonra düzenlendi ve bilmiyordum, soru düzenleme geçmişine bakın. Yorumunuz, soruyu düzenledikten sonra yanlış olan cevabımı düzeltmeme yardımcı oldu.
Adil

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

13

Tüm bunları okudum ama biraz daha şık bir şey istedim. Bir dizenin sonundan belirli sayıda karakteri kaldırmak için:

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

çıktı:

"he"

7
Bu, dizginin uzunluğuna ihtiyaç duymadığından oldukça "yaratıcıdır", ancak tersi işlem muhtemelen daha pahalıdır.
Aleksandar

4
Bir dizeyi ters çevirmek, karakterlerini saymaktan kesinlikle daha pahalıdır. Tamamen yeni bir dizginin oluşturulması, ardından orijinal dizinin ona kopyalanması, ardından orijinal dizinin çöp olarak toplanması gerekir.
Matt Gregory

@MattGregory dizeleri değişmezdir: Remove, Substring, herhangi bir dize işlevi yeni bir dize oluşturur. Orijinal işaretçinin üzerine yazmak her zaman çöp toplamaya neden olur. Bu, Enumerable.Reversedizeyi a'ya tamponladığı için char[], daha sonra char[]3 daha kısa olan yeni bir tampon haline getirdiği ve ardından yeni string(dahili olarak bir başkasıyla char[]) oluşturduğu için yine de daha yavaştır . Daha iyi bir yaklaşım new string("hello".Reverse().Skip(3)), veya sadece AllBut(this string in, int i)Substring kullanan kendi dize uzantısı işlevinizi yazmak olabilir.
Wolfzoon

@MattGregory Bir dizenin karakterlerini "saymaz" bile, bir dizenin Lengthsaklandığı yer vardır.
Wolfzoon

1
Şimdi bizde de var .SkipLast(n). Hiçbir şeyi tersine çevirmeye gerek yok. "hello".SkipLast(3)verir"he"
AjitZero



5

String.RemoveDizenin belirli bir konumdan sonuna kadar silmek için kullanabilirsiniz .

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

4

Muhtemelen "dinamik veri" olduğunu söylediğiniz için aradığınız şey tam olarak bu olmayabilir, ancak örnek dizeniz göz önüne alındığında, bu da işe yarar:

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



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

1

Bir dizeden son karakterleri kaldırın

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

.Text.Remove(10)// 10. dizinden sonuna kadar metni kaldırmak için kullanılır


1

Yeni C # 8.0 aralığı operatörü, bunu başarmak için harika bir kısayol olabilir.

Misal:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()o dizinden sonuna kadar tüm öğeleri kaldırır. items.length - 3endeksi sondan 3 karakter alır


0

Kolay. text = text.remove(text.length - 3). 3 çıkardım çünkü Removeişlev tüm öğeleri o dizinden olan dizenin sonuna kadar kaldırır text.length. Yani 3 çıkarırsam, 3 karakter çıkarılmış dizeyi elde ederim.

Bunu adizenin sonundaki karakterleri kaldırarak şu şekilde genelleştirebilirsiniz :

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

Yani yaptığım şey aynı mantıktı. removeFonksiyon metnin uzunluğu dizenin sonuna kadar onun içeriden tüm öğeleri kaldırır. Öyleyse a, dizenin uzunluğundan çıkarırsam , bu bana akarakterleri kaldırılmış dizeyi verecek .

Yani sadece 3 için çalışmaz, tüm pozitif tamsayılar için çalışır, dize uzunluğunun daha az veya ona eşit olması dışında a, bu durumda negatif bir sayı veya 0 döndürür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.