ทำให้อักขระทั้งหมดอยู่ทางขวาของขีดสุดท้าย


114

ฉันมีสิ่งต่อไปนี้:

string test = "9586-202-10072"

ฉันจะทำให้อักขระทั้งหมดอยู่ทางขวาของลำดับสุดท้ายได้-อย่างไร 10072 จำนวนอักขระจะแตกต่างกันทางด้านขวาของขีดสุดท้ายเสมอ

จะทำได้อย่างไร?

คำตอบ:


237

คุณสามารถรับตำแหน่งสุดท้าย-ด้วยstr.LastIndexOf('-'). ดังนั้นขั้นตอนต่อไปจึงชัดเจน:

var result = str.Substring(str.LastIndexOf('-') + 1);

การแก้ไข :

ดังที่ Brian ระบุไว้ด้านล่างการใช้สิ่งนี้กับสตริงที่ไม่มีขีดกลางจะส่งผลให้สตริงเดียวกันถูกส่งกลับ


1
สิ่งนี้ใช้ได้แม้ว่ายัติภังค์จะเป็นอักขระตัวสุดท้ายในกรณีนี้จะส่งคืนสตริงว่างอย่างถูกต้อง สิ่งนี้จะล้มเหลวก็ต่อเมื่อstrเป็นโมฆะหรือไม่มียัติภังค์เลย (ในกรณีที่ไม่มียัติภังค์จะไม่โยนมันจะส่งคืนสตริงต้นทางทั้งหมด)
ลุค

@LukeH: ขอบคุณสำหรับข้อมูลเพิ่มเติม ฉันไม่ได้ตรวจสอบและเข้าใจผิดว่ามันจะโยน
จอน

3
ก็LastIndexOfจะคืนค่า -1 หากไม่พบอะไร (นี่คือพฤติกรรมที่มีการบันทึกไว้ดังนั้นจึงปลอดภัยที่จะพึ่งพา) str.Substring(1-1)ให้สตริงเท่ากับstr. ไม่น่าแปลกใจที่นี่
Brian

2
@ ไบรอัน: ฉันคิดว่าฉันทำลายสถิติของฉันสำหรับความผิดพลาดส่วนใหญ่ในคำพูดที่ไม่สำคัญ บทเรียน: อย่าเขียนอะไรเลยโดยไม่ต้องพิสูจน์รหัสหลังจากข้อเท็จจริง ขอบคุณ
จอน

57

คุณสามารถใช้ LINQ และช่วยตัวเองในการแยกวิเคราะห์อย่างชัดเจน:

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

5
ซึ่งอาจจะช่วยประหยัดเวลาของนักพัฒนาได้มากที่สุด แต่ในกรณีทั่วไปโปรดทราบว่าโค้ดเช่นนี้จะมีการจัดสรรสตริงจำนวนมาก (อาจเป็นสี่ตัวในตัวอย่างด้านบน) ดังนั้นจึงอาจถือว่าอยู่ในส่วนที่สำคัญต่อประสิทธิภาพ
Charles Burns


4
YourString.Substring(YourString.LastIndexOf("-"));

4
หากคุณไม่รวม "+ 1" ในตอนท้ายผลลัพธ์จะมีอักขระพิเศษพร้อมกับสตริง
นา

3

ฉันเห็นว่าโพสต์นี้ถูกดูมากกว่า 46,000 ครั้ง ฉันจะพนันได้เลยว่าผู้ชม 46,000 คนถามคำถามนี้เพียงเพราะต้องการชื่อไฟล์ ... และคำตอบเหล่านี้อาจเป็นโพรงกระต่ายได้หากคุณไม่สามารถสร้างสตริงย่อยได้ทุกคำโดยใช้เครื่องหมาย at

หากคุณต้องการรับชื่อไฟล์ก็มีคำตอบง่ายๆที่ควรกล่าวถึงที่นี่ แม้ว่าจะไม่ใช่คำตอบที่แม่นยำสำหรับคำถามก็ตาม

result = Path.GetFileName(fileName);

ดูhttps://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

ฉันสร้างส่วนขยายสตริงสำหรับสิ่งนี้หวังว่าจะช่วยได้

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

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