Cara mendapatkan lima karakter pertama dari String


133

Saya telah membaca pertanyaan ini untuk mendapatkan karakter pertama dari string. Apakah ada cara untuk mendapatkan n jumlah karakter pertama dari string dalam C #?


Pertanyaan sebelumnya adalah bertanya tentang char** s dan Anda bertanya tentang ** karakter s. Mereka bukan hal yang sama. 𣊾dan 𣇞dua karakter yang harus saya gunakan baru kemarin yang gagal dalam perangkat lunak yang ditulis dalam C # saya gunakan karena programmer tidak tahu perbedaan antara a chardan karakter. Jangan jatuh ke dalam perangkap ini!
hippietrail

Jawaban:


218

Anda dapat menggunakan Enumerable. Ambil seperti:

char[] array = yourStringVariable.Take(5).ToArray();

Atau Anda dapat menggunakan String.Substring .

string str = yourStringVariable.Substring(0,5);

Ingatlah bahwa String.Substringbisa melempar pengecualian jika panjang string kurang dari karakter yang diperlukan.

Jika Anda ingin mendapatkan hasil dalam string maka Anda dapat menggunakan:

  • Menggunakan String Constructor dan LINQ Take

    string firstFivChar = new string(yourStringVariable.Take(5).ToArray());

Nilai tambah dengan pendekatan ini tidak memeriksa panjang sebelum tangan.

  • Cara lain adalah menggunakan String.Substringpengecekan kesalahan

Suka:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;

3
string val = string baru (yourStringVariable.Take (6) .ToArray ()); tetapi Substring akan salah jika panjang yourStringVariable kurang dari 5
Moji

1
IsNullOrWhiteSpacesalah disini. Pertimbangkan string dengan 10 kosong - kode Anda akan mengembalikan semua 10. Gunakan IsNullOrEmptysaja. (Ini tidak baik untuk digabungkan IsNullOrWhiteSpacedengan tes lain; Alih-alih tes untuk null + kosong, maka Trimjika itu adalah perilaku tertentu, maka lakukan tes / operasi apa pun yang diperlukan.)
ToolmakerSteve

1
Anda dapat menyimpan panggilan ke ToArray () dengan menggunakan String.Concat () seperti: string firstFivChar = String.Compat (yourStringVariable.Take (5));
BlueFuzzyThing


38

Anda dapat menggunakan Substring (int startIndex, int length)

string result = str.Substring(0,5);

Substring dimulai pada posisi karakter yang ditentukan dan memiliki panjang yang ditentukan. Metode ini tidak mengubah nilai instance saat ini. Sebagai gantinya, ia mengembalikan string baru dengan karakter panjang mulai dari posisi startIndex di string saat ini, MSDN

Bagaimana jika string sumber kurang dari lima karakter? Anda akan mendapatkan pengecualian dengan menggunakan metode di atas. Kita dapat memberi syarat untuk memeriksa apakah jumlah karakter dalam string lebih dari 5 kemudian mendapatkan lima pertama melalui Substring. Catatan Saya telah menetapkan string sumber ke variabel firstFiveChar. FirstFiveChar tidak berubah jika karakter kurang dari 5, jadi bagian lain tidak diperlukan.

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

29

Tidak ada yang menyebutkan cara melakukan pemeriksaan yang benar saat menggunakan Substring(), jadi saya ingin berkontribusi tentang hal itu.

Jika Anda tidak ingin menggunakan Linqdan menggunakannya Substring(), Anda harus memastikan bahwa string Anda lebih besar dari parameter kedua (panjang) Substring()fungsi.

Katakanlah Anda membutuhkan 5 karakter pertama. Anda harus memeriksanya dengan benar, seperti ini:

string title = "love" // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);

// firstFiveChars: "love" (4 characters)

Tanpa pemeriksaan ini, Substring()fungsi akan mengeluarkan pengecualian karena akan beralih melalui huruf yang tidak ada.

Saya pikir Anda mendapatkan ide ...


info ekstra yang luar biasa
Rob85

Saya senang Anda menyukainya.
ilter

Ini banyak membantu saya, tetapi bisakah Anda menjelaskan apa yang sebenarnya ia lakukan di baris itu?
jimbob

Saya akan memeriksa beberapa contoh tentang substring. Dibutuhkan parameter untuk indeks. Indeks awal adalah 0. Jika Anda menulis sesuatu yang lebih besar (atau lebih kecil, dalam hal ini) daripada indeks terakhir dari array apa pun, Anda mendapatkan pengecualian indeks. Cek itu, dalam contoh ini adalah untuk menghindari pengecualian itu.
ilter

Hahhahaha! :) Itu adalah pertanyaan yang saya jawab. Haruskah saya membiarkan pertanyaan itu tidak terjawab? :)
ilter

18

Masalahnya .Substring(,)adalah, Anda harus yakin bahwa string yang diberikan setidaknya memiliki panjang karakter yang diminta, jika tidak ArgumentOutOfRangeExceptionmaka akan dilempar.

Solusi 1 (menggunakan 'Substring'):

var firstFive = stringValue != null ? 
                   stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
                   null;

Kekurangan menggunakan .Substring(adalah Anda harus memeriksa panjang string yang diberikan.

Solusi 2 (menggunakan 'Ambil'):

var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

Menggunakan 'Take' akan mencegah Anda perlu memeriksa panjang string yang diberikan.


13

Gunakan fungsi PadRight untuk mencegah agar string tidak terlalu pendek, ambil apa yang Anda butuhkan lalu pangkas spasi dari ujungnya semua dalam satu pernyataan.

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
Ini adalah solusi yang lebih baik sejauh ini. Menggunakan Substring saja dapat menyebabkan kesalahan ketika panjang string lebih rendah dari panjang substring.
Asiri Dissanayaka

alternatif terbaik untuk fungsi LEFT yang kami gunakan di SQL Server
vibs2006

11

Saya tidak tahu mengapa ada yang menyebutkan ini. Tapi ini cara terpendek dan paling sederhana untuk mencapai ini.

string str = yourString.Remove(n);

n - jumlah karakter yang Anda butuhkan

Contoh

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141

3
Ini secara internal sama dengan "ini. Substring (0, 5)", jadi Anda perlu memastikan string memiliki panjang yang tepat.
PersyJack

Dalam kasus di mana Anda ingin karakter n pertama, ini hanya berfungsi jika Anda tahu panjang string. Jika panjangnya bisa berubah, ini tidak akan selalu berhasil. Saya tahu itu mungkin jelas bagi kebanyakan orang, tetapi hanya menyebutkannya untuk siapa saja yang lewat ...
user1289451

10

Tambahkan lima karakter spasi kemudian potong lima pertama dan pangkas hasilnya. Jumlah spasi yang Anda tambahkan harus sesuai dengan jumlah yang Anda potong. Pastikan untuk menyertakan tanda kurung sebelum .Substring(0,X)atau Anda tidak akan menambahkan apa pun.

string str = (yourStringVariable + "    ").Substring(0,5).Trim();

Dengan teknik ini Anda tidak perlu khawatir tentang yang ArgumentOutOfRangeExceptiondisebutkan dalam jawaban lain.


1
sialan aku akan memposting itu !! terbalik. (ini tahun 2019, mengapa tidak ada metode string yang melakukan apa yang dilakukan Mid $ pada tahun 1985? Bagi mereka yang mengatakan 'Anda tidak boleh melakukan itu' OK, ayo tuliskan kode saya untuk saya ... Anda harus lakukan itu ...)
FastAl

7
string str = "GoodMorning"

string strModified = str.Substring(0,5);

2
akan keliru jika panjang variabel "str" ​​kurang dari 5
Moji

6

Hanya ada beberapa cara baru untuk melakukan ini di C # 8.0: Range operator

Microsoft Documents

Atau seperti saya suka memanggil mereka, Pandas iris.

Cara lama:

string newString = oldstring.Substring(0, 5);

Jalan baru:

string newString = oldstring[..5];

Yang sekilas tampak seperti tradeoff yang sangat buruk dari beberapa keterbacaan untuk kode pendek tetapi fitur baru memberi Anda

  1. sintaks standar untuk mengiris array (dan karenanya string)
  2. hal-hal keren seperti ini:

    var slice1 = daftar [2 .. ^ 3]; // daftar [Range.Create (2, Index.CreateFromEnd (3))]

    var slice2 = daftar [.. ^ 3]; // daftar [Range.ToEnd (Index.CreateFromEnd (3))]

    var slice3 = daftar [2 ..]; // daftar [Range.FromStart (2)]

    var slice4 = daftar [..]; // daftar [Rentang. Semua]


3

Untuk mendapatkan n jumlah karakter pertama dari string dalam C #

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

2

Di bawah ini adalah metode ekstensi yang memeriksa apakah string lebih besar dari yang dibutuhkan dan mempersingkat string ke jumlah maksimum karakter yang ditentukan dan menambahkan '...'.

public static class StringExtensions
{
    public static string Ellipsis(this string s, int charsToDisplay)
    {
        if (!string.IsNullOrWhiteSpace(s))
            return s.Length <= charsToDisplay ? s : new string(s.Take(charsToDisplay).ToArray()) + "...";
        return String.Empty;
    }
}


1

Saya menggunakan:

var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);

atau alternatif jika Anda ingin memeriksa Whitespace juga (bukan hanya Null):

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue

1

Atau Anda bisa menggunakan String.ToCharArray () .
Dibutuhkan int startindexdan dan int lengthsebagai parameter dan mengembalikan achar[]

new string(stringValue.ToCharArray(0,5))

Anda masih perlu memastikan bahwa string memiliki panjang yang tepat, jika tidak maka akan melempar a ArgumentOutOfRangeException


1

Silakan coba kode ini ketika str kurang dari 5.

string strModified = str.Substring(0,str.Length>5?5:str.Length);

0

Jika kita hanya ingin 5 karakter pertama dari bidang apa pun, maka ini dapat dicapai dengan Atribut Kiri

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""


-3

Saya sudah mencoba jawaban di atas dan yang terbaik menurut saya adalah yang ini

@item.First_Name.Substring(0,1)

Dalam hal ini saya bisa mendapatkan huruf pertama dari string

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.