Jak usunąć pierwsze 10 znaków z ciągu?


94

Jak zignorować pierwsze 10 znaków ciągu?

Wejście:

str = "hello world!";

Wynik:

d!

9
string.Substring (9); gdzie 9 to indeks początkowy
Waqas

Pamiętaj, aby najpierw sprawdzić, czy ciąg ma co najmniej 10 znaków, inaczej otrzymasz wyjątek.
Jonathan,

Dlaczego podciąg nie obsługuje (startIndex, endindex)? za każdym razem, gdy musimy obliczyć Długość .. :-(
Sangram Nandkhile

1
@Waqas: właściwie to str.Substring (10), parametr określający pozycję, z której zaczyna się wyciągać podciąg
Răzvan Flavius ​​Panda

Odpowiedzi:


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

będziesz musiał sprawdzić długość, inaczej spowodowałoby to błąd


217

str = str.Remove(0,10); Usuwa pierwsze 10 znaków

lub

str = str.Substring(10); Tworzy podciąg zaczynający się od jedenastego znaku do końca ciągu.

Dla twoich celów powinny działać identycznie.


16

Podciąg jest prawdopodobnie tym, czego chcesz, jak wskazywali inni. Ale żeby dodać kolejną opcję do miksu ...

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

Nie musisz nawet sprawdzać długości tego! :) Jeśli jest mniej niż 10 znaków, otrzymasz pusty łańcuch.


Aby zwiększyć czytelność, możesz użyć „”. Kompiluje się dokładnie tak samo jak string - obecnie jest pusty.
PRMan

Nie, "" tworzy nowy ciąg, podczas gdy string.Empty odwołuje się do jednego. To nie ma znaczenia pod względem wydajności (mam na myśli jeden pusty ciąg, więc tak ...), ale chciałem tylko zwrócić uwagę :)
Zer0

„” rzeczywiście nie tworzy nowego ciągu, zobacz tutaj stackoverflow.com/a/263257/604613
UrbanEsc

11

Substring ma dwie metody przeciążania:

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.

W tym scenariuszu możesz użyć pierwszej metody, takiej jak ta poniżej:

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

Oto wynik:

d!

Jeśli możesz zastosować kodowanie obronne, sprawdzając jego długość.


6

SubstringMa parametr o nazwie startIndex. Ustaw go zgodnie z indeksem, od którego chcesz zacząć.


3

Możesz usunąć znak za pomocą poniższej linii,

: - Najpierw sprawdź, czy String ma wystarczającą liczbę znaków do usunięcia , na przykład

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


1

Możesz użyć metody Substring , która przyjmuje pojedynczy parametr, czyli indeks, od którego należy zacząć.

W moim kodzie poniżej zajmuję się przypadkiem, gdy długość jest mniejsza niż żądany indeks początkowy i gdy długość wynosi zero.

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

obecnie zwraca ostatni znak z łańcucha, jeśli łańcuch ma mniej niż 10 znaków.
Răzvan Flavius ​​Panda

1

Dla:

var str = "hello world!";

Aby otrzymać wynikowy ciąg bez pierwszych 10 znaków i pusty ciąg, jeśli długość ciągu jest mniejsza lub równa 10, możesz użyć:

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

lub

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

Preferowany jest pierwszy wariant, ponieważ wymaga tylko jednego parametru metody.


1

Nie ma potrzeby określania długości w Substringmetodzie. W związku z tym:

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

p będzie:

„lo świat”.

Jedynym wyjątkiem, na który musisz zwrócić uwagę, jest sytuacja, ArgumentOutOfRangeExceptiongdy startIndexjest mniejsza od zera lub większa niż długość tego wystąpienia.


0

Począwszy od C # 8, możesz po prostu użyć operatora zakresu. To wydajniejszy i lepszy sposób na załatwienie takich spraw.

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

C# 8nie jest obsługiwana podczas kierowania .NET Framework.
l33t

0

Wywołanie SubString()przydziela nowy ciąg. Aby uzyskać optymalną wydajność, należy unikać tego dodatkowego przydziału. Zaczynając od C# 7.2możesz skorzystać ze wzoru Span .

Podczas kierowania .NET Frameworkuwzględnij pakiet System.Memory NuGet . W przypadku .NET Coreprojektów działa to po wyjęciu z pudełka.

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();
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.