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!
csharper
źródło
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

V4Vendetta
źródło
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.

crlanglois
źródło
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.

UrbanEsc
źródło
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ść.

Rousonur Jaman
źródło
6

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

Sascha
źródło
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);
   }
Snack'Eyes
źródło
1

Użyj metody podciągowej.

string s = "hello world";
s=s.Substring(10, s.Length-10);
Ashley John
źródło
2
zgłasza wyjątek, jeśli ciąg jest krótszy niż indeks początkowy
Răzvan Flavius ​​Panda.
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)));
George Duckett
źródło
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.

Răzvan Flavius ​​Panda
źródło
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.

alex leo
źródło
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..];
Książę Pandey
źródło
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();
}
l33t
źródło