Przeczytałem to pytanie, aby uzyskać pierwszy znak ciągu. Czy istnieje sposób, aby uzyskać pierwszą liczbę n znaków z ciągu w C #?
Przeczytałem to pytanie, aby uzyskać pierwszy znak ciągu. Czy istnieje sposób, aby uzyskać pierwszą liczbę n znaków z ciągu w C #?
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;
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 łączenie IsNullOrWhiteSpace
z jakimkolwiek innym testem; Zamiast tego przetestuj pod kątem null + pustego, a następnie Trim
jeśli jest to określone zachowanie, wykonaj wszystkie potrzebne testy / operacje.)
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);
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.
string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
firstFiveChar = yourStringVariable.Substring(0, 5);
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ść z Substring()
, 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ł ...
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 ArgumentOutOfRangeException
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.
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();
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ów
Przykład
var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141
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.
Tylko uwaga, jest nowy sposób na zrobienie tego w C # 8.0: operatory zakresu
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]
string str = "GoodMorning"
string strModified = str.Substring(0,5);
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);
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;
}
}
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
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
Lub możesz użyć String.ToCharArray () .
Pobiera int startindex
i int 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
Prosimy spróbować tego kodu, gdy str jest mniejsze niż 5.
string strModified = str.Substring(0,str.Length>5?5:str.Length);
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:
Console.WriteLine(first5.ToString());
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.
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) : ""
Wypróbuj poniższy kod
string Name = "Abhishek";
string firstfour = Name.Substring(0, 4);
Response.Write(firstfour);
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
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ę!