tempatkan semua karakter di kanan tanda hubung terakhir

114

Saya memiliki yang berikut ini:

string test = "9586-202-10072"

Bagaimana saya mendapatkan semua karakter di sebelah kanan final - jadi 10072. Jumlah karakter selalu berbeda di sebelah kanan tanda hubung terakhir.

Bagaimana ini bisa dilakukan?

pengguna380432
sumber

Jawaban:

237

Anda bisa mendapatkan posisi terakhir -dengan str.LastIndexOf('-'). Jadi langkah selanjutnya sudah jelas:

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

Koreksi :

Seperti yang dikatakan Brian di bawah ini, menggunakan ini pada string tanpa tanda hubung akan menghasilkan string yang sama dikembalikan.

Jon
sumber
1
Ini berfungsi bahkan ketika tanda hubung adalah karakter terakhir, dalam hal ini mengembalikan string kosong dengan benar. Ini hanya akan gagal jika strnol atau jika tidak mengandung tanda hubung sama sekali. (Dalam kasus di mana tidak ada tanda hubung yang tidak dilempar; mengembalikan seluruh string sumber.)
LukeH
@ LukeH: Terima kasih atas perhatiannya. Saya tidak memeriksa dan salah mengira itu akan melempar.
Jon
3
Nah, LastIndexOfmengembalikan -1 jika tidak ada yang ditemukan (ini adalah perilaku yang terdokumentasi, jadi aman untuk mengandalkannya). str.Substring(1-1)memberi Anda string yang sama dengan str. Tidak ada kejutan di sini.
Brian
2
@ Brian: Saya pikir saya memecahkan rekor saya untuk sebagian besar kesalahan dalam pernyataan sepele yang sama. Pelajaran: jangan pernah menulis apa pun tanpa mengoreksi kode setelah fakta. Terima kasih.
Jon
57

Anda dapat menggunakan LINQ, dan menyimpan sendiri penguraian eksplisit:

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

Console.WriteLine(lastFragment);
p. campbell
sumber
5
Ini mungkin akan menghemat sebagian besar waktu pengembang, tetapi dalam kasus umum perhatikan bahwa kode seperti ini akan banyak alokasi string (mungkin empat dalam contoh di atas) sehingga mungkin tidak ditekankan di bagian kinerja-kritis.
Charles Burns
5
string tail = test.Substring(test.LastIndexOf('-') + 1);
LukeH
sumber
4
YourString.Substring(YourString.LastIndexOf("-"));
msarchet.dll
sumber
4
jika Anda mengecualikan "+ 1" di akhir, maka output akan berisi karakter khusus bersama dengan string.
Meena
3

Saya dapat melihat posting ini telah dilihat lebih dari 46.000 kali. Saya berani bertaruh banyak dari 46.000 pemirsa menanyakan pertanyaan ini hanya karena mereka hanya menginginkan nama file ... dan jawaban ini bisa menjadi lubang kelinci jika Anda tidak dapat membuat substring Anda kata demi kata menggunakan tanda di.

Jika Anda hanya ingin mendapatkan nama file, maka ada jawaban sederhana yang harus disebutkan di sini. Meskipun itu bukan jawaban yang tepat untuk pertanyaan itu.

result = Path.GetFileName(fileName);

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

pengguna704401
sumber
1

test.Substring(test.LastIndexOf("-"))

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

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

Saya membuat ekstensi string untuk ini, semoga membantu.

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;
    }
NSDumb
sumber