Bir dizeden ilk 10 karakter nasıl kaldırılır?


95

Bir dizenin ilk 10 karakteri nasıl göz ardı edilir?

Giriş:

str = "hello world!";

Çıktı:

d!

9
string.Substring (9); 9 başlangıç ​​dizini nerede
Waqas

Önce dizede en az 10 karakter olup olmadığını kontrol etmeyi unutmayın, yoksa bir istisna alırsınız.
Jonathan

Alt dize neden (startIndex, endindex) desteklemiyor? Uzunluğu her hesaplamamız gerektiğinde .. :-(
Sangram Nandkhile

1
@Waqas: aslında str.Substring (10), parametre alt dizenin çıkarılmaya başladığı konumdur
Răzvan Flavius ​​Panda

Yanıtlar:


99
str = "hello world!";
str.Substring(10, str.Length-10)

uzunluk kontrollerini yapmanız gerekecek, aksi takdirde bu bir hataya neden olabilir


Bunun herhangi bir yerde bahsedildiğini görmüyorum, ancak .substring () kullanmanız gerektiğine inanıyorum, hata veren .Substring () kullanmamalısınız
Dror Bar

220

str = str.Remove(0,10); İlk 10 karakteri kaldırır

veya

str = str.Substring(10); Dizenin 11. karakterinden başlayarak sonuna kadar bir alt dize oluşturur.

Sizin amaçlarınız için aynı şekilde çalışmalıdırlar.


16

Başkalarının da belirttiği gibi, muhtemelen istediğiniz şey alt dizedir. Ancak karışıma başka bir seçenek eklemek için ...

string result = string.Join(string.Empty, str.Skip(10));

Bunun uzunluğunu kontrol etmenize bile gerek yok! :) 10 karakterden küçükse, boş bir dize alırsınız.


Daha iyi okunabilirlik için "" kullanabilirsiniz. Bugünlerde string.Empty ile tamamen aynı şekilde derleniyor.
PRMan

"" Yeni bir dizge oluşturmaz, string.Empty ise bir dizgeye başvurur. Performans açısından gerçekten önemli değil (yani boş bir dize yani evet ...) ama sadece şunu belirtmek istedim :)
Zer0

"" gerçekten yeni bir dize oluşturmuyor, buraya bakın stackoverflow.com/a/263257/604613
UrbanEsc

11

Substring iki Aşırı Yükleme yöntemine sahiptir:

public string Substring(int startIndex);//The substring starts at a specified character position and continues to the end of the string.

public string Substring(int startIndex, int length);//The substring starts at a specified character position and taking length no of character from the startIndex.

Dolayısıyla bu senaryo için aşağıdaki gibi ilk yöntemi kullanabilirsiniz:

var str = "hello world!";
str = str.Substring(10);

İşte çıktı:

d!

Uzunluğunu kontrol ederek savunma kodlaması uygulayabilirsiniz.


6

SubstringStartIndex adı verilen bir parametre vardır. Başlamak istediğiniz dizine göre ayarlayın.


3

Aşağıdaki Satırı kullanarak Char Kaldırabilirsiniz,

: - dize kaldırmak için yeterli karakter vardır Yani ilk check gibi

   string temp="Hello Stack overflow";
   if(temp.Length>10)
   {
    string textIWant = temp.Remove(0, 10);
   }


1

Başlamak için dizin olan tek bir parametre alan Substring yöntemini kullanabilirsiniz .

Aşağıdaki kodumda, uzunluğun istediğiniz başlangıç ​​indeksinden daha az olduğu ve uzunluğun sıfır olduğu durumla ilgileniyorum.

string s = "hello world!";
s = s.Substring(Math.Max(0, Math.Min(10, s.Length - 1)));

şu anda dizenin uzunluğu 10 karakterden azsa dizedeki son karakteri döndürür.
Răzvan Flavius ​​Panda

1

İçin:

var str = "hello world!";

Sonuçta elde edilen dizeyi ilk 10 karakter olmadan ve dize uzunluğu 10'dan daha az veya ona eşitse boş bir dize elde etmek için şunu kullanabilirsiniz:

var result = str.Length <= 10 ? "" : str.Substring(10);

veya

var result = str.Length <= 10 ? "" : str.Remove(0, 10);

İlk değişken, yalnızca bir yöntem parametresine ihtiyaç duyduğu için tercih edilir.


1

SubstringYöntemde uzunluğun belirtilmesine gerek yoktur . Bu nedenle:

string s = hello world;
string p = s.Substring(3);

p olacak:

"lo world".

Olduğu için size hitap gereken tek istisnası ArgumentOutOfRangeExceptionise startIndexbu durumda uzunluğundan daha az sıfır veya daha fazladır.


0

C # 8'den başlayarak, Range Operator'ü kullanabilirsiniz. Bu tür durumlarla başa çıkmanın daha verimli ve daha iyi yolu.

string AnString = "Hello World!";
AnString = AnString[10..];

C# 8hedefleme sırasında desteklenmez .NET Framework.
l33t

0

Çağrı SubString(), yeni bir dizi tahsis eder. En iyi performans için, bu fazladan ayırmadan kaçınmalısınız. İle başlayarak C# 7.2size yararlanabilirsiniz Açıklık deseni.

Hedeflerken .NET Frameworkiçerir System.Memory NuGet paketi. İçin .NET Coreprojelerin bu kutunun çalışır.

static void Main(string[] args)
{
    var str = "hello world!";
    var span = str.AsSpan(10); // No allocation!

    // Outputs: d!
    foreach (var c in span)
    {
        Console.Write(c);
    }

    Console.WriteLine();
}
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.