จะลบอักขระ 10 ตัวแรกออกจากสตริงได้อย่างไร?


95

จะละเว้น 10 อักขระแรกของสตริงได้อย่างไร?

อินพุต:

str = "hello world!";

เอาท์พุต:

d!

9
สตริงย่อย (9); โดยที่ 9 คือดัชนีเริ่มต้น
Waqas

อย่าลืมตรวจสอบก่อนว่าสตริงมีอย่างน้อย 10 ตัวอักษรมิฉะนั้นคุณจะได้รับข้อยกเว้น
Jonathan

ทำไมสตริงย่อยไม่รองรับ (startIndex, endindex) ทุกครั้งเราต้องคำนวณ Length .. :-(
Sangram Nandkhile

1
@Waqas: จริงๆแล้วมันคือ str. Substring (10) ซึ่งเป็นพารามิเตอร์ที่เป็นตำแหน่งที่เริ่มดึงสตริงย่อย
Răzvan Flavius ​​Panda

คำตอบ:


99
str = "hello world!";
str.Substring(10, str.Length-10)

คุณจะต้องทำการตรวจสอบความยาวมิฉะนั้นจะทำให้เกิดข้อผิดพลาด


ฉันไม่เห็นสิ่งนี้กล่าวถึงที่ใด แต่ฉันเชื่อว่าคุณควรใช้ .substring () ไม่ใช่. Substring () ซึ่งแสดงข้อผิดพลาด
Dror Bar

220

str = str.Remove(0,10); ลบ 10 อักขระแรก

หรือ

str = str.Substring(10); สร้างสตริงย่อยโดยเริ่มจากอักขระที่ 11 ไปยังจุดสิ้นสุดของสตริง

สำหรับวัตถุประสงค์ของคุณควรทำงานเหมือนกัน


16

สตริงย่อยอาจเป็นสิ่งที่คุณต้องการตามที่คนอื่น ๆ ชี้ให้เห็น แต่เพียงเพื่อเพิ่มตัวเลือกอื่นในการผสม ...

string result = string.Join(string.Empty, str.Skip(10));

คุณไม่จำเป็นต้องตรวจสอบความยาวของสิ่งนี้! :) หากมีน้อยกว่า 10 ตัวอักษรคุณจะได้รับสตริงว่างเปล่า


และเพื่อให้อ่านง่ายขึ้นคุณสามารถใช้ "" มันคอมไพล์เหมือนกับสตริงทุกประการวันนี้ว่างเปล่า
PRMan

ไม่ "" สร้างสตริงใหม่ในขณะที่สตริงการอ้างอิงว่างเปล่า มันไม่สำคัญจริงๆในแง่ของประสิทธิภาพ (ฉันหมายความว่ามันเป็นสตริงว่างหนึ่งสายใช่แล้ว ... ) แต่แค่อยากจะชี้ให้เห็น :)
Zer0

"" ไม่ได้สร้างสตริงใหม่ดูที่นี่stackoverflow.com/a/263257/604613
UrbanEsc

11

Substring มีสองวิธีการโอเวอร์โหลด:

public string Substring(int startIndex);//The substring starts at a specified character position and continues to the end of the string.

public string Substring(int startIndex, int length);//The substring starts at a specified character position and taking length no of character from the startIndex.

ดังนั้นสำหรับสถานการณ์นี้คุณอาจใช้วิธีแรกดังนี้:

var str = "hello world!";
str = str.Substring(10);

ผลลัพธ์คือ:

d!

หากคุณสามารถใช้การเข้ารหัสป้องกันได้โดยตรวจสอบความยาว


6

Substringมีพารามิเตอร์ที่เรียกว่า startIndex ตั้งค่าตามดัชนีที่คุณต้องการเริ่มต้น


3

คุณสามารถลบ Char โดยใช้บรรทัดด้านล่าง

: - ขั้นแรกให้ตรวจสอบว่าสตริงนั้นมีอักขระเพียงพอที่จะลบออกเช่น

   string temp="Hello Stack overflow";
   if(temp.Length>10)
   {
    string textIWant = temp.Remove(0, 10);
   }


1

คุณสามารถใช้เมธอดSubstring method ที่รับพารามิเตอร์เดียวซึ่งเป็นดัชนีที่จะเริ่มต้น

ในรหัสของฉันด้านล่างฉันจัดการกับกรณีคือความยาวน้อยกว่าดัชนีเริ่มต้นที่คุณต้องการและเมื่อความยาวเป็นศูนย์

string s = "hello world!";
s = s.Substring(Math.Max(0, Math.Min(10, s.Length - 1)));

ปัจจุบันจะส่งคืนอักขระสุดท้ายจากสตริงหากสตริงมีความยาวน้อยกว่า 10 อักขระ
Răzvan Flavius ​​Panda

1

สำหรับ:

var str = "hello world!";

หากต้องการรับสตริงผลลัพธ์ที่ไม่มีอักขระ 10 ตัวแรกและสตริงว่างหากสตริงมีความยาวน้อยกว่าหรือเท่ากับ 10 คุณสามารถใช้:

var result = str.Length <= 10 ? "" : str.Substring(10);

หรือ

var result = str.Length <= 10 ? "" : str.Remove(0, 10);

ตัวแปรแรกที่ต้องการเนื่องจากต้องการพารามิเตอร์วิธีการเดียวเท่านั้น


1

ไม่จำเป็นต้องระบุความยาวลงในSubstringวิธีการ ดังนั้น:

string s = hello world;
string p = s.Substring(3);

p จะ:

"แท้จริงโลก".

ข้อยกเว้นเดียวที่คุณต้องรองรับคือArgumentOutOfRangeExceptionถ้า startIndexน้อยกว่าศูนย์หรือมากกว่าความยาวของอินสแตนซ์นี้


0

เริ่มจาก C # 8 คุณก็สามารถใช้ Range Operator ได้ เป็นวิธีที่มีประสิทธิภาพและดีกว่าในการจัดการกรณีดังกล่าว

string AnString = "Hello World!";
AnString = AnString[10..];

C# 8.NET Frameworkไม่สนับสนุนเมื่อกำหนดเป้าหมาย
l33t

0

การโทรจะSubString()จัดสรรสตริงใหม่ เพื่อประสิทธิภาพสูงสุดคุณควรหลีกเลี่ยงการจัดสรรพิเศษนั้น เริ่มต้นด้วยC# 7.2คุณสามารถใช้ประโยชน์จากรูปแบบSpan

เมื่อกำหนดเป้าหมาย.NET Frameworkให้รวมแพ็คเกจSystem.Memory NuGetสำหรับ.NET Coreโครงการนี้ใช้งานได้นอกกรอบ

static void Main(string[] args)
{
    var str = "hello world!";
    var span = str.AsSpan(10); // No allocation!

    // Outputs: d!
    foreach (var c in span)
    {
        Console.Write(c);
    }

    Console.WriteLine();
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.