Misalkan saya punya string:
"34234234d124"
Saya ingin mendapatkan empat karakter terakhir dari string ini yaitu "d124"
. Saya dapat menggunakan SubString
, tetapi perlu beberapa baris kode, termasuk penamaan variabel.
Apakah mungkin mendapatkan hasil ini dalam satu ekspresi dengan C #?
4 > mystring.length ? mystring : mystring.Substring(mystring.length -4);
"hello world"[-4:]
. Saya harap versi C # di masa depan akan membuatnya mudah."hello world"[^4..]
:-)Jawaban:
Jika Anda yakin panjang string Anda setidaknya 4, maka itu lebih pendek:
sumber
mystring
kurang dari 4 karakter.Anda dapat menggunakan metode ekstensi :
Dan kemudian telepon:
sumber
Yang harus Anda lakukan adalah ..
sumber
Ok, jadi saya melihat ini adalah posting lama, tetapi mengapa kita menulis ulang kode yang sudah disediakan dalam framework?
Saya akan menyarankan Anda menambahkan referensi ke kerangka kerja DLL "Microsoft.VisualBasic"
sumber
VisualBasic
namespace?TextFieldParser
adalah contoh lain. Mengapa utilitas ini diperhitungkan begitu aneh?sumber
Menggunakan Substring sebenarnya cukup singkat dan mudah dibaca:
sumber
Berikut adalah alternatif lain yang tidak seharusnya berkinerja terlalu buruk (karena eksekusi yang ditangguhkan ):
new string(mystring.Reverse().Take(4).Reverse().ToArray());
Meskipun metode ekstensi untuk tujuan
mystring.Last(4)
tersebut jelas merupakan solusi terbersih, meskipun sedikit lebih banyak pekerjaan.sumber
Reverse().Take(4).Reverse()
jangan masing-masing menyebutkan seluruh string, itu hanya terjadi padaToArray
panggilan terakhir . Jika tidak ada eksekusi yang ditangguhkan, itu akan diterjemahkan menjadiReverse().ToArray().Take(4).ToArray().Reverse().ToArray()
. Ini, tentu saja, mengasumsikan ekstensi itu adalah jenis yang ditangguhkan - yang saya tidak periksa. Konstruktor string tidak menerima IEnumerable, jadi Anda harus menghitungnya ke array pada saat itu.Anda cukup menggunakan
Substring
metode C #. MisalnyaIni akan mengembalikan hasil 0000.
sumber
startIndex
?Solusi sederhana adalah:
sumber
sumber
=
tidak bermaksud begitu=+
.Hanya ini:
sumber
Dibandingkan dengan beberapa jawaban sebelumnya, perbedaan utama adalah bagian kode ini mempertimbangkan ketika string input adalah:
Ini dia:
sumber
Definisi:
Pemakaian:
Hasil:
dari
sumber
Ini tidak akan gagal untuk string panjang apa pun.
Ini mungkin berlebihan untuk tugas yang dihadapi, tetapi jika perlu ada validasi tambahan, itu mungkin dapat ditambahkan ke ekspresi reguler.
Sunting: Saya pikir regex ini akan lebih efisien:
sumber
Gunakan obat generik
Last<T>
. Itu akan bekerja dengan APAPUNIEnumerable
, termasuk string.Dan yang spesifik untuk string:
sumber
Saya mengumpulkan beberapa kode yang dimodifikasi dari berbagai sumber yang akan mendapatkan hasil yang Anda inginkan, dan melakukan lebih banyak lagi selain itu. Saya mengizinkan nilai int negatif, nilai int yang melebihi panjang string, dan indeks akhir lebih kecil dari indeks awal. Dalam kasus terakhir, metode mengembalikan substring urutan terbalik. Ada banyak komentar, tetapi beri tahu saya jika ada yang tidak jelas atau hanya gila. Saya bermain-main dengan ini untuk melihat apa yang mungkin saya gunakan untuk itu.
Jadi jika Anda memiliki string seperti "Ini adalah metode ekstensi", berikut adalah beberapa contoh dan hasil yang diharapkan.
Semoga versi ini bermanfaat bagi seseorang. Ini beroperasi seperti biasa jika Anda tidak menggunakan angka negatif apa pun, dan memberikan standar untuk param di luar rentang.
sumber
sumber
dengan asumsi Anda menginginkan string di antara string yang terletak 10 karakter dari karakter terakhir dan Anda hanya perlu 3 karakter.
Katakanlah
StreamSelected = "rtsp://72.142.0.230:80/SMIL-CHAN-273/4CIF-273.stream"
Di atas, saya perlu mengekstrak
"273"
yang akan saya gunakan dalam permintaan basis datasumber
Substring
sudah memungkinkan Anda melewati titik awal dan panjang jadi tidak yakin mengapa Anda tidak akan menggunakannya daripada menggunakanRemove
untuk menghapus awal lebih dulu.Pembaruan 2020 : C # 8.0 akhirnya membuatnya mudah:
Anda juga dapat mengiris array dengan cara yang sama, lihat Indeks dan rentang .
sumber