ลบอักขระสามตัวสุดท้ายออกจากสตริง


122

ฉันต้องการลบอักขระสามตัวสุดท้ายออกจากสตริง:

string myString = "abcdxxx"; 

โปรดทราบว่าสตริงเป็นข้อมูลแบบไดนามิก


1
อ่านอักขระ 3 ตัวสุดท้าย = สิ่งหนึ่งลบอักขระ 3 ตัวสุดท้าย = อีกตัวหนึ่ง ที่?
Kieren Johnstone

คำตอบ:


234

อ่านอักขระ 3 ตัวสุดท้ายจากสตริง [คำถามที่ถามเบื้องต้น]

คุณสามารถใช้string.Substringและให้ดัชนีเริ่มต้นและมันจะได้สตริงย่อยเริ่มจากดัชนีที่กำหนดจนถึงจุดสิ้นสุด

myString.Substring(myString.Length-3)

ดึงสตริงย่อยจากอินสแตนซ์นี้ สตริงย่อยเริ่มต้นที่ตำแหน่งอักขระที่ระบุ MSDN

แก้ไขสำหรับโพสต์ที่อัปเดต

ลบอักขระ 3 ตัวสุดท้ายออกจากสตริง [คำถามที่อัปเดต]

ในการลบช่วงสามตัวละครจากสตริงที่คุณสามารถใช้string.Substring (Int32, Int32)และให้มันเริ่มต้นดัชนี0และสิ้นสุดดัชนีสามน้อยกว่าความยาวสตริง มันจะได้รับสตริงย่อยก่อนอักขระสามตัวสุดท้าย

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

วิธี String.Substring (Int32, Int32)

ดึงสตริงย่อยจากอินสแตนซ์นี้ สตริงย่อยเริ่มต้นที่ตำแหน่งอักขระที่ระบุและมีความยาวที่ระบุ

คุณยังสามารถใช้วิธีString.Remove (Int32)เพื่อลบอักขระสามตัวสุดท้ายโดยส่งดัชนีเริ่มต้นเป็นความยาว - 3มันจะลบจากจุดนี้ไปยังจุดสิ้นสุดของสตริง

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

String.Remove วิธีการ (Int32)

ส่งคืนสตริงใหม่ซึ่งอักขระทั้งหมดในอินสแตนซ์ปัจจุบันเริ่มต้นที่ตำแหน่งที่ระบุและดำเนินการต่อไปจนถึงตำแหน่งสุดท้ายถูกลบ


13
นี่ไม่ใช่คำตอบ
braks

21
ขอบคุณ @braks คำถามที่ถามในตอนแรกคือ "read last 3 characters from string" ซึ่งได้รับการแก้ไขในภายหลัง แต่ฉันไม่ทราบโปรดดูประวัติการแก้ไขคำถาม ความคิดเห็นของคุณช่วยฉันแก้ไขคำตอบของฉันที่ผิดหลังจากแก้ไขคำถามแล้ว
Adil


13

ฉันอ่านสิ่งเหล่านี้ทั้งหมด แต่ต้องการอะไรที่หรูหรากว่านี้ เพียงเพื่อลบอักขระจำนวนหนึ่งออกจากส่วนท้ายของสตริง:

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

เอาท์พุท:

"he"

7
อันนี้ค่อนข้าง "สร้างสรรค์" เนื่องจากไม่ต้องการความยาวของสตริง แต่การดำเนินการย้อนกลับอาจมีราคาแพงกว่า
Aleksandar

4
การย้อนกลับสตริงนั้นแพงกว่าการนับอักขระ ต้องสร้างสตริงใหม่ทั้งหมดจากนั้นคัดลอกต้นฉบับไปที่สตริงจากนั้นสตริงเดิมจะต้องถูกรวบรวมขยะ
Matt Gregory

สตริง @MattGregory ไม่เปลี่ยนรูป: Remove, Substring, ฟังก์ชันสตริงใด ๆ จะสร้างสตริงใหม่ การเขียนทับตัวชี้เดิมทำให้เกิดการรวบรวมขยะเสมอ สิ่งนี้ยังช้ากว่าแม้ว่าจะEnumerable.Reverseบัฟเฟอร์สตริงเป็น a char[]จากนั้นจึงบัฟเฟอร์ใหม่char[]ที่สั้นกว่า 3 จากนั้นจึงสร้างใหม่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"




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). ฉันลบ 3 เนื่องจากRemoveฟังก์ชันลบรายการทั้งหมดจากดัชนีนั้นไปยังจุดสิ้นสุดของสตริงซึ่งเป็น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.