Poprzednie pytanie dotyczy char** postaci, a ty dotyczy ** postaci . To nie to samo. 𣊾i 𣇞są dwoma znakami, których potrzebowałem wczoraj, które zawiodły w oprogramowaniu napisanym w C #, którego używałem, ponieważ programista nie znał różnicy między a chari znakiem. Nie wpadnij w tę pułapkę!
string val = new string (yourStringVariable.Take (6) .ToArray ()); ale podłańcuch będzie błąd, jeśli długość zmiennej yourStringVariable jest mniejsza niż 5
Moji,
1
IsNullOrWhiteSpacejest źle tutaj. Rozważ łańcuch z 10 spacjami - Twój kod zwróci wszystkie 10. IsNullOrEmptyZamiast tego użyj . (Nie jest dobre łączenie IsNullOrWhiteSpacez jakimkolwiek innym testem; Zamiast tego przetestuj pod kątem null + pustego, a następnie Trimjeśli jest to określone zachowanie, wykonaj wszystkie potrzebne testy / operacje.)
Spowoduje to przejście przez wyjątek, jeśli długość yourStringjest mniejsza niż 5. Aby uniknąć wyjątku, możemy zastosować podciąg oparty na warunku, na przykład:yourString.Length <= 5 ? yourString : yourString.Substring(0, 5)
Podciąg zaczyna się w określonej pozycji znaku i ma określoną długość. Ta metoda nie modyfikuje wartości bieżącego wystąpienia. Zamiast tego zwraca nowy ciąg o długości znaków, zaczynając od pozycji startIndex w bieżącym ciągu,
MSDN
A jeśli łańcuch źródłowy ma mniej niż pięć znaków? Otrzymasz wyjątek, używając powyższej metody. Możemy postawić warunek, aby sprawdzić, czy liczba znaków w ciągu jest większa niż 5, a następnie pobierz pierwsze pięć przez podłańcuch. Uwaga Przypisałem ciąg źródłowy do zmiennej firstFiveChar. FirstFiveChar nie zmienia się, jeśli liczba znaków jest mniejsza niż 5, więc w przeciwnym razie część nie jest wymagana.
To mi bardzo pomogło, ale czy mógłbyś wyjaśnić, co dokładnie robi w tej linii?
jimbob
Chciałbym sprawdzić kilka przykładów dotyczących podciągu. Pobiera parametry dla indeksów. Indeks początkowy to 0. Jeśli napiszesz coś większego (lub mniejszego) niż ostatni indeks dowolnej tablicy, otrzymasz wyjątek poza indeksem. Ta kontrola w tym przykładzie służy uniknięciu tego wyjątku.
ilter
Hahhahaha! :) To było pytanie, na które odpowiedziałem. Czy powinienem pozostawić to pytanie bez odpowiedzi? :)
ilter
18
Problem .Substring(,)polega na tym, że musisz mieć pewność, że podany ciąg ma długość co najmniej zadanej liczby znaków, w przeciwnym razie ArgumentOutOfRangeExceptionzostanie wyrzucony znak .
Jest to wewnętrznie to samo, co „this.Substring (0, 5)”, więc musisz upewnić się, że ciąg ma odpowiednią długość.
PersyJack
W przypadku, gdy chcesz pierwszych n znaków, działa to tylko wtedy, gdy znasz długość ciągu. Jeśli długość może się zmienić, nie zawsze będzie to działać. Wiem, że jest to prawdopodobnie oczywiste dla większości, ale
wspomnę
10
Dołącz pięć białych znaków, a następnie odetnij pierwsze pięć i przytnij wynik. Liczba dodanych spacji powinna odpowiadać liczbie wycinanej. Pamiętaj, aby wcześniej dodać nawias, w .Substring(0,X)przeciwnym razie nic nie zostanie dodane.
cholera, miałem zamiar to opublikować !! głosowano. (jest rok 2019, dlaczego nie może istnieć metoda na łańcuchu, która robi to, co zrobił Mid $ w 1985? Dla tych, którzy mówią `` nie powinieneś tego robić '' OK, przyjdź i napisz dla mnie mój kod ... będziesz musiał zrób to ...)
FastAl
8
Tylko uwaga, jest nowy sposób na zrobienie tego w C # 8.0: operatory zakresu
Poniżej znajduje się metoda rozszerzenia, która sprawdza, czy ciąg jest większy niż potrzebny, i skraca ciąg do zdefiniowanej maksymalnej liczby znaków i dodaje „...”.
publicstaticclassStringExtensions
{
publicstaticstringEllipsis(thisstring s, int charsToDisplay)
{
if (!string.IsNullOrWhiteSpace(s))
return s.Length <= charsToDisplay ? s : newstring(s.Take(charsToDisplay).ToArray()) + "...";
return String.Empty;
}
}
Span <T> punkty bezpośrednio do pamięci łańcucha, unikając przydzielania tymczasowy łańcuch. Oczywiście każda kolejna metoda stringwymagająca konwersji wymaga konwersji:
Console.WriteLine(first5.ToString());
Chociaż obecnie wiele .NETinterfejsów API zezwala na rozpiętości. Trzymaj się ich, jeśli to możliwe!
Uwaga: w przypadku kierowania .NET Frameworkdodaj odwołanie do pakietu System.Memory , ale nie oczekuj takiej samej doskonałej wydajności.
char
** postaci, a ty dotyczy ** postaci . To nie to samo.𣊾
i𣇞
są dwoma znakami, których potrzebowałem wczoraj, które zawiodły w oprogramowaniu napisanym w C #, którego używałem, ponieważ programista nie znał różnicy między achar
i znakiem. Nie wpadnij w tę pułapkę!Odpowiedzi:
Możesz użyć Enumerable .
char[] array = yourStringVariable.Take(5).ToArray();
Lub możesz użyć String.Substring .
string str = yourStringVariable.Substring(0,5);
Pamiętaj, że
String.Substring
może zgłosić wyjątek w przypadku, gdy długość łańcucha jest mniejsza niż wymagane znaki.Jeśli chcesz otrzymać wynik z powrotem w postaci ciągu, możesz użyć:
Korzystanie z konstruktora ciągów i LINQ
Take
string firstFivChar = new string(yourStringVariable.Take(5).ToArray());
Plusem tego podejścia nie jest sprawdzenie długości przed ręką.
String.Substring
ze sprawdzaniem błędówlubić:
string firstFivCharWithSubString = !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5 ? yourStringVariable.Substring(0, 5) : yourStringVariable;
źródło
IsNullOrWhiteSpace
jest źle tutaj. Rozważ łańcuch z 10 spacjami - Twój kod zwróci wszystkie 10.IsNullOrEmpty
Zamiast tego użyj . (Nie jest dobre łączenieIsNullOrWhiteSpace
z jakimkolwiek innym testem; Zamiast tego przetestuj pod kątem null + pustego, a następnieTrim
jeśli jest to określone zachowanie, wykonaj wszystkie potrzebne testy / operacje.)Proszę spróbować:
yourString.Substring(0, 5);
Sprawdź C # Substring , String.Substring Method
źródło
yourString
jest mniejsza niż 5. Aby uniknąć wyjątku, możemy zastosować podciąg oparty na warunku, na przykład:yourString.Length <= 5 ? yourString : yourString.Substring(0, 5)
Możesz użyć Substring (int startIndex, int length)
string result = str.Substring(0,5);
A jeśli łańcuch źródłowy ma mniej niż pięć znaków? Otrzymasz wyjątek, używając powyższej metody. Możemy postawić warunek, aby sprawdzić, czy liczba znaków w ciągu jest większa niż 5, a następnie pobierz pierwsze pięć przez podłańcuch. Uwaga Przypisałem ciąg źródłowy do zmiennej firstFiveChar. FirstFiveChar nie zmienia się, jeśli liczba znaków jest mniejsza niż 5, więc w przeciwnym razie część nie jest wymagana.
string firstFiveChar = str; If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5) firstFiveChar = yourStringVariable.Substring(0, 5);
źródło
Nikt nie wspomniał, jak prawidłowo sprawdzać podczas używania
Substring()
, więc chciałem się nad tym przyczynić.Jeśli nie chcesz używać
Linq
i iść zSubstring()
, musisz upewnić się, że twój ciąg jest większy niż drugi parametr (długość)Substring()
funkcji.Powiedzmy, że potrzebujesz pierwszych 5 znaków. Powinieneś je otrzymać z odpowiednim sprawdzeniem, takim jak ten:
string title = "love" // 15 characters var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5); // firstFiveChars: "love" (4 characters)
Bez tego sprawdzenia
Substring()
funkcja zgłosiłaby wyjątek, ponieważ iterowałaby przez litery, których nie ma.Myślę, że masz pomysł ...
źródło
Problem
.Substring(,)
polega na tym, że musisz mieć pewność, że podany ciąg ma długość co najmniej zadanej liczby znaków, w przeciwnym razieArgumentOutOfRangeException
zostanie wyrzucony znak .Rozwiązanie 1 (używając „Podłańcuch”):
var firstFive = stringValue != null ? stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) : null;
Wadą używania
.Substring(
jest to, że musisz sprawdzić długość podanego ciągu.Rozwiązanie 2 (używając „Take”):
var firstFive = stringValue != null ? string.Join("", stringValue.Take(5)) : null;
Użycie „Take” zapobiega konieczności sprawdzania długości podanego ciągu.
źródło
Użyj funkcji PadRight, aby zapobiec zbyt krótkiemu łańcuchowi, weź to, czego potrzebujesz, a następnie przytnij spacje od końca w jednej instrukcji.
strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();
źródło
Nie wiem, dlaczego ktoś o tym wspomniał. Ale to najkrótsza i najłatwiejsza droga do osiągnięcia tego.
string str = yourString.Remove(n);
n
- liczba potrzebnych znakówPrzykład
var zz = "7814148471"; Console.WriteLine(zz.Remove(5)); //result - 78141
źródło
Dołącz pięć białych znaków, a następnie odetnij pierwsze pięć i przytnij wynik. Liczba dodanych spacji powinna odpowiadać liczbie wycinanej. Pamiętaj, aby wcześniej dodać nawias, w
.Substring(0,X)
przeciwnym razie nic nie zostanie dodane.string str = (yourStringVariable + " ").Substring(0,5).Trim();
Dzięki tej technice nie będziesz musiał martwić się o
ArgumentOutOfRangeException
wspomniane w innych odpowiedziach.źródło
Tylko uwaga, jest nowy sposób na zrobienie tego w C # 8.0: operatory zakresu
Dokumenty Microsoft
Lub, jak lubię je nazywać, plastry pandy.
Stara droga:
string newString = oldstring.Substring(0, 5);
Nowy sposób:
string newString = oldstring[..5];
Co na pierwszy rzut oka wydaje się być dość złym kompromisem w postaci pewnej czytelności dla krótszego kodu, ale nowa funkcja daje
fajne rzeczy takie jak to:
var slice1 = lista [2 .. ^ 3]; // lista [Range.Create (2, Index.CreateFromEnd (3))]
var slice2 = lista [.. ^ 3]; // lista [Range.ToEnd (Index.CreateFromEnd (3))]
var slice3 = lista [2 ..]; // lista [Range.FromStart (2)]
var slice4 = lista [..]; // lista [Range.All]
źródło
string str = "GoodMorning" string strModified = str.Substring(0,5);
źródło
Aby uzyskać pierwszą liczbę n znaków z ciągu w C #
String yourstring="Some Text"; String first_n_Number_of_Characters=yourstring.Substring(0,n);
źródło
Poniżej znajduje się metoda rozszerzenia, która sprawdza, czy ciąg jest większy niż potrzebny, i skraca ciąg do zdefiniowanej maksymalnej liczby znaków i dodaje „...”.
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; } }
źródło
W C # 8.0 można uzyskać pierwsze pięć znaków ciągu, jak to
string str = data[0..5];
Oto więcej informacji na temat indeksów i zakresów
źródło
Używam:
var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);
lub alternatywa, jeśli chcesz również sprawdzić odstępy (zamiast tylko Null):
var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue
źródło
Lub możesz użyć String.ToCharArray () .
Pobiera
int startindex
iint length
jako parametry i zwraca plikchar[]
new string(stringValue.ToCharArray(0,5))
Nadal musisz upewnić się, że ciąg ma odpowiednią długość, w przeciwnym razie wyrzuci
ArgumentOutOfRangeException
źródło
Prosimy spróbować tego kodu, gdy str jest mniejsze niż 5.
string strModified = str.Substring(0,str.Length>5?5:str.Length);
źródło
Tak to robisz w 2020 roku:
var s = "ABCDEFGH"; var first5 = s.AsSpan(0, 5);
Span <T> punkty bezpośrednio do pamięci łańcucha, unikając przydzielania tymczasowy łańcuch. Oczywiście każda kolejna metoda
string
wymagająca konwersji wymaga konwersji:Chociaż obecnie wiele
.NET
interfejsów API zezwala na rozpiętości. Trzymaj się ich, jeśli to możliwe!Uwaga: w przypadku kierowania
.NET Framework
dodaj odwołanie do pakietu System.Memory , ale nie oczekuj takiej samej doskonałej wydajności.źródło
AsSpan
.NET 5
lub przynajmniej.NET Core
. W każdym razie działa,.NET Framework 4.5+
jeśli dodasz pewne zależności.Jeśli chcemy tylko pierwszych 5 znaków z dowolnego pola, można to osiągnąć za pomocą Left Attribute
Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""
źródło
Wypróbuj poniższy kod
string Name = "Abhishek"; string firstfour = Name.Substring(0, 4); Response.Write(firstfour);
źródło
Wypróbowałem powyższe odpowiedzi i myślę, że najlepsza jest ta
@item.First_Name.Substring(0,1)
W tym mogłem uzyskać pierwszą literę ciągu
źródło