Bir String'in ilk beş karakteri nasıl elde edilir


133

Dizenin ilk karakterini almak için bu soruyu okudum . C # 'da bir dizeden ilk n karakter sayısını almanın bir yolu var mı?


Önceki soru char** lar hakkında soru soruyorsunuz ve siz ** karakterleri soruyorsunuz . Aynı şey değiller. 𣊾ve 𣇞daha dün kullanmam gereken iki karakter var, bu da C # ile yazılan yazılımda başarısız oldu çünkü programcı a charve bir karakter arasındaki farkı bilmiyordu . Bu tuzağa düşmeyin!
hippietrail

Yanıtlar:


218

Sen kullanabilirsiniz Enumerable.Take gibi:

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

Veya String.Substring'i kullanabilirsiniz .

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

String.SubstringDize uzunluğunun gerekli karakterlerden daha az olması durumunda bunun bir istisna oluşturabileceğini unutmayın .

Sonucu dizge olarak geri almak istiyorsanız, şunu kullanabilirsiniz:

  • String Constructor ve LINQ'ları kullanma Take

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

Yaklaşımdaki artı, elden önce uzunluğu kontrol etmek değildir.

  • Diğer yol, String.Substringhata kontrolü ile kullanmaktır

sevmek:

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

3
string val = new string (yourStringVariable.Take (6) .ToArray ()); ancak Dizge Değişkeninizin uzunluğu 5'ten azsa Alt dize hatası verir
Moji

1
IsNullOrWhiteSpaceburada yanlış. 10 boşluklu bir dize düşünün - kodunuz tüm 10'u döndürecektir. IsNullOrEmptyBunun yerine kullanın . ( IsNullOrWhiteSpaceBaşka bir testle birleştirmek iyi değildir ; Bunun yerine null + boş için test edin, o Trimzaman bu davranış belirtilmişse, o zaman gereken testleri / işlemleri yapın.)
ToolmakerSteve

1
String.Concat () kullanarak ToArray () çağrısını şu şekilde kaydedebilirsiniz: string firstFivChar = String.Concat (yourStringVariable.Take (5));
BlueFuzzyThing


38

Sen kullanabilirsiniz alt dize (int startIndex, int uzunluk)

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

Alt dize, belirtilen bir karakter konumunda başlar ve belirli bir uzunluğa sahiptir. Bu yöntem, geçerli örneğin değerini değiştirmez. Bunun yerine, geçerli dizedeki startIndex konumundan başlayarak uzunluk karakterlerine sahip yeni bir dize döndürür, MSDN

Ya kaynak dizge beş karakterden azsa? Yukarıdaki yöntemi kullanarak istisna elde edeceksiniz. Dizedeki karakter sayısının 5'ten fazla olup olmadığını kontrol etmek için koşul koyabiliriz, ardından Substring aracılığıyla ilk beşi alabiliriz. Not firstFiveChar değişkenine kaynak dizeyi atadım. Karakterler 5'ten küçükse firstFiveChar değişmez, bu nedenle bölüm gerekli değildir.

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

29

Kullanırken doğru kontrollerin nasıl yapılacağından kimse bahsetmedi Substring(), bu yüzden buna katkıda bulunmak istedim.

Kullanmak Linqve devam etmek istemiyorsanız Substring(), dizenizin Substring()işlevin ikinci parametresinden (uzunluk) daha büyük olduğundan emin olmalısınız .

Diyelim ki ilk 5 karaktere ihtiyacınız var. Bunları aşağıdaki gibi uygun bir kontrolle almalısınız:

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

// firstFiveChars: "love" (4 characters)

Bu kontrol olmasaydı, Substring()işlev, orada olmayan harfleri yinelediği için bir istisna atardı.

Sanırım anladın ...


güzel ekstra bilgi
Rob85

Beğenmene sevindim.
ilter

Bu bana çok yardımcı oldu, ama bu çizgide tam olarak ne yaptığını açıklayabilir misin?
jimbob

Alt dizeyle ilgili bazı örnekleri kontrol ederdim. Dizinler için parametreler alır. Başlangıç ​​dizini 0'dır. Herhangi bir dizinin son dizininden daha büyük (veya daha küçük) bir şey yazarsanız, dizin dışı bir istisna elde edersiniz. Örnekteki bu kontrol, bu istisnadan kaçınmak içindir.
ilter

Hahhahaha! :) Cevapladığım bir soruydu. Bu soruyu cevapsız bırakmalı mıyım? :)
ilter

18

Buradaki sorun .Substring(,), verilen dizenin en azından istenen sayıda karakter uzunluğuna sahip olduğundan emin olmanız gerektiğidir, aksi takdirde bir ArgumentOutOfRangeExceptionatılır.

1.Çözüm ('Alt Dize' kullanarak):

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

Kullanmanın dezavantajı .Substring(, verilen dizenin uzunluğunu kontrol etmeniz gerekmesidir.

2. Çözüm ('Take' kullanarak):

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

'Al'ı kullanmak , verilen dizginin uzunluğunu kontrol etmenizi engelleyecektir.


13

Dizenin çok kısa olmasını önlemek için PadRight işlevini kullanın, ihtiyacınız olanı alın ve ardından sondaki boşlukları tek bir ifadede kesin.

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

1
Şimdiye kadar daha iyi bir çözüm bu. Yalnızca Alt dize kullanmak, dize uzunluğu alt dize uzunluğundan daha düşük olduğunda hataya neden olabilir.
Asiri Dissanayaka

SQL Server'da kullandığımız LEFT işlevi için en iyi alternatif
vibs2006

11

Neden kimsenin bundan bahsettiğini bilmiyorum. Ancak bunu başarmanın en kısa ve en basit yolu.

string str = yourString.Remove(n);

n - ihtiyacınız olan karakter sayısı

Misal

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

3
Bu, dahili olarak "this.Substring (0, 5)" ile aynıdır, bu nedenle dizenin uygun uzunluğa sahip olduğundan emin olmanız gerekir.
PersyJack

İlk n karakteri istediğiniz bir durumda, bu yalnızca dizenin uzunluğunu biliyorsanız çalışır. Uzunluk değişebilirse, bu her zaman işe yaramayacaktır. Bunun muhtemelen çoğu kişi için aşikar olduğunu biliyorum, ancak yanından geçen herhangi biri için bundan bahsetmek ...
user1289451

10

Beş boşluk karakteri ekleyin, ardından ilk beş karakteri kesin ve sonucu kesin. Eklediğiniz boşluk sayısı, kestiğiniz sayı ile eşleşmelidir. Parantezi .Substring(0,X)eklediğinizden emin olun, aksi takdirde hiçbir şey eklemezsiniz.

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

Bu teknikle ArgumentOutOfRangeException, diğer cevaplarda bahsedilenler için endişelenmenize gerek kalmayacak .


1
Kahretsin, bunu gönderecektim !! upvoted. (2019, neden Mid $ 'ın 1985'te yaptığını yapan bir yöntem dizge üzerinde olamaz?' Bunu yapmamalısın 'diyenler için tamam gel benim için kodumu yaz ... yap ...)
FastAl

7
string str = "GoodMorning"

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

2
"str" ​​değişkeninin uzunluğu 5'ten küçükse hata verir
Moji

6

C # 8.0'da bunu yapmanın yeni bir yolu var: Menzil operatörleri

Microsoft Docs

Ya da onları aramayı sevdiğim gibi, Pandas dilimleri.

Eski yol:

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

Yeni yol:

string newString = oldstring[..5];

İlk bakışta daha kısa kod için okunabilirlik konusunda oldukça kötü bir değiş tokuş gibi görünen ancak yeni özellik size

  1. dizileri (ve dolayısıyla dizeleri) dilimlemek için standart bir sözdizimi
  2. bunun gibi harika şeyler:

    var dilim1 = liste [2 .. ^ 3]; // list [Range.Create (2, Index.CreateFromEnd (3))]

    var dilim2 = liste [.. ^ 3]; // list [Range.ToEnd (Index.CreateFromEnd (3))]

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

    var slice4 = liste [..]; // [Range.All] listele


3

C # 'da bir dizeden ilk n karakter sayısını almak için

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

2

Aşağıda, bir dizenin gerekenden daha büyük olup olmadığını kontrol eden ve dizeyi tanımlanan maksimum karakter miktarına kısaltan ve '...' ekleyen bir uzantı yöntemi bulunmaktadır.

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

Kullanırım:

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

veya Whitespace'i de kontrol etmek istiyorsanız alternatif (yalnızca Null yerine):

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

1

Veya String.ToCharArray () kullanabilirsiniz . Parametre olarak
alır int startindexve alır ve int lengthbirchar[]

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

Yine de dizenin uygun uzunluğa sahip olduğundan emin olmanız gerekir, aksi takdirde bir ArgumentOutOfRangeException


1

Lütfen str 5'ten küçük olduğunda bu kodu deneyin.

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

0

Herhangi bir alandan sadece ilk 5 karakter istiyorsak, bu Sol Nitelik ile sağlanabilir.

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


-3

Yukarıdaki cevapları denedim ve bence en iyisi bu

@item.First_Name.Substring(0,1)

Bunda dizenin ilk harfini alabilirim

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.