Xóa ba ký tự cuối cùng khỏi chuỗi


122

Tôi muốn xóa ba ký tự cuối cùng khỏi chuỗi:

string myString = "abcdxxx"; 

Lưu ý rằng chuỗi là dữ liệu động.


1
Đọc 3 ký tự cuối = một điều, xóa 3 ký tự cuối = khác. Cái nào?
Kieren Johnstone

Câu trả lời:


234

đọc 3 ký tự cuối cùng từ chuỗi [Câu hỏi ban đầu]

Bạn có thể sử dụng chuỗi.Sub chuỗi và cung cấp cho nó chỉ mục bắt đầu và nó sẽ nhận được chuỗi con bắt đầu từ chỉ mục đã cho đến khi kết thúc.

myString.Substring(myString.Length-3)

Lấy một chuỗi con từ trường hợp này. Chuỗi con bắt đầu tại một vị trí ký tự được chỉ định. MSDN

Chỉnh sửa , cho bài đăng cập nhật

Xóa 3 ký tự cuối cùng khỏi chuỗi [Câu hỏi cập nhật]

Để xóa ba ký tự cuối cùng khỏi chuỗi, bạn có thể sử dụng chuỗi.Sub chuỗi (Int32, Int32) và cung cấp cho nó chỉ mục bắt đầu 0và chỉ mục kết thúc ba ít hơn độ dài chuỗi . Nó sẽ nhận được chuỗi con trước ba ký tự cuối cùng.

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

Phương thức String.Sub chuỗi (Int32, Int32)

Lấy một chuỗi con từ trường hợp này. Chuỗi con bắt đầu tại một vị trí ký tự được chỉ định và có độ dài được chỉ định.

Bạn cũng có thể sử dụng phương thức String.Remove (Int32) để loại bỏ ba ký tự cuối cùng bằng cách chuyển chỉ mục bắt đầu là độ dài - 3 , nó sẽ xóa từ điểm này đến hết chuỗi.

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

Phương thức String.Remove (Int32)

Trả về một chuỗi mới trong đó tất cả các ký tự trong trường hợp hiện tại, bắt đầu tại một vị trí đã chỉ định và tiếp tục qua vị trí cuối cùng, đã bị xóa


13
Đây không phải là câu trả lời
braks

21
Cảm ơn @braks, câu hỏi ban đầu được hỏi là "đọc 3 ký tự cuối cùng từ chuỗi" Điều này sau đó được chỉnh sửa và tôi không biết, hãy xem lịch sử chỉnh sửa câu hỏi. Nhận xét của bạn đã giúp tôi sửa câu trả lời của mình trở thành sai sau khi chỉnh sửa câu hỏi.
Adil

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

13

Tôi đọc qua tất cả những điều này, nhưng muốn một cái gì đó thanh lịch hơn một chút. Chỉ cần xóa một số ký tự nhất định khỏi cuối chuỗi:

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

đầu ra:

"he"

7
Cái này khá "sáng tạo", vì nó không cần độ dài của chuỗi, nhưng thao tác ngược lại có thể đắt hơn.
Aleksandar

4
Đảo ngược một chuỗi chắc chắn tốn kém hơn so với đếm các ký tự của nó. Một chuỗi hoàn toàn mới cần được xây dựng, sau đó sao chép ban đầu vào chuỗi đó, sau đó chuỗi gốc cần được thu gom rác.
Matt Gregory

Các chuỗi @MattGregory là bất biến: Loại bỏ, Chuỗi con, bất kỳ chức năng chuỗi nào cũng tạo ra một chuỗi mới. Ghi đè con trỏ ban đầu luôn gây ra bộ sưu tập rác. Tuy nhiên, điều này vẫn chậm hơn, khi Enumerable.Reverseđệm chuỗi thành một char[], sau đó đệm vào một chuỗi mới char[]ngắn hơn 3, và sau đó tạo ra một chuỗi mới string(với bên trong khác char[]). Một cách tiếp cận tốt hơn sẽ là new string("hello".Reverse().Skip(3)), hoặc chỉ viết hàm mở rộng chuỗi của riêng bạn AllBut(this string in, int i)sử dụng Chuỗi con.
Wolfzoon

@MattGregory Thậm chí không "đếm" các ký tự của chuỗi, một chuỗi đã Lengthđược lưu trữ.
Wolfzoon

1
Bây giờ chúng tôi cũng có .SkipLast(n). Không cần phải đảo ngược bất cứ điều gì. "hello".SkipLast(3)cho"he"
AjitZero



5

Bạn có thể sử dụng String.Removeđể xóa từ một vị trí được chỉ định đến cuối chuỗi.

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

4

Có thể không chính xác những gì bạn đang tìm kiếm vì bạn nói đó là "dữ liệu động" nhưng được cung cấp chuỗi ví dụ của bạn, điều này cũng hoạt động:

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



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

1

Xóa các ký tự cuối cùng khỏi chuỗi

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

.Text.Remove(10)// được sử dụng để xóa văn bản bắt đầu từ chỉ mục 10 đến hết


1

Toán tử phạm vi C # 8.0 mới có thể là một phím tắt tuyệt vời để đạt được điều này.

Thí dụ:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()loại bỏ tất cả các mục từ chỉ mục đó đến cuối. items.length - 3nhận được chỉ số 3 ký tự từ cuối


0

Dễ dàng. text = text.remove(text.length - 3). Tôi đã trừ 3 vì Removehàm này sẽ loại bỏ tất cả các mục từ chỉ mục đó đến cuối chuỗi text.length. Vì vậy, nếu tôi trừ 3 thì tôi nhận được chuỗi có 3 ký tự bị xóa khỏi nó.

Bạn có thể khái quát hóa điều này để loại bỏ các aký tự từ cuối chuỗi, như thế này:

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

Vì vậy, những gì tôi đã làm là logic tương tự. Các removechức năng loại bỏ tất cả các mục từ bên trong của nó đến cuối của chuỗi đó là độ dài của văn bản. Vì vậy, nếu tôi trừ đi ađộ dài của chuỗi sẽ cung cấp cho tôi chuỗi có aký tự bị xóa.

Vì vậy, nó không chỉ hoạt động cho 3, nó hoạt động cho tất cả các số nguyên dương, ngoại trừ nếu độ dài của chuỗi nhỏ hơn hoặc bằng a, trong trường hợp đó, nó sẽ trả về số âm hoặc 0.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.