Eh bien, j'aimerais obtenir les deux premier et dernier caractères d'une chaîne. C'est ce que j'ai déjà
public static string FirstLastChars(this string str) { return str.Substring(0,2); }
BTW. C'est une méthode d'extension
4 Réponses :
À partir de C # 8.0, vous pouvez utiliser des plages de tableaux:
public static class StringExtentions { public static string FirstLastChars(this string str) { // If it's less that 4, return the entire string if(str.Length < 4) return str; return str[..2] + str[^2..]; } }
Vérifiez la solution ici: https://dotnetfiddle.net/zBBT3U
Notez que cela nécessite C # 8 et .Net Core - si vous utilisez C # 8 avec .Net Framework, vous ne pouvez pas utiliser de plages de tableaux.
str[..]
=> cela n'apporte vraiment rien.
Présentant simplement les index. Je l'ai supprimé et je ne renvoie maintenant que la chaîne d'origine.
Vous pouvez utiliser la méthode Substring de chaîne existante. Vérifiez le code suivant.
public static string FirstLastChars(this string str) { if(str.Length < 4) { return str; } return str.Substring(0,2) + str.Substring(str.Length - 1, 1) ; }
Vous pouvez également utiliser Span
Api.
Vous devez d'abord créer un tampon et le transmettre à une instance Span
. (Avec cela , vous avez une écriture Span
.)
class Program { static void Main(string[] args) { string str = "Hello World!"; Console.WriteLine(str.FirstLastChars()); //He! } }
À partir de la str
origine, vous pouvez créer deux instances ReadOnlySpan<char>
pour avoir des références pour les deux premières lettres et pour la dernière lettre.
public static class StringExtentions { public static string FirstLastChars(this string str) { if (str.Length < 4) return str; var strBuffer = new char[3]; var resultSpan = new Span<char>(strBuffer); var strBegin = str.AsSpan(0, 2); var strEnd = str.AsSpan(str.Length - 1, 1); strBegin.CopyTo(resultSpan.Slice(0, 2)); strEnd.CopyTo(resultSpan.Slice(2, 1)); return new string(resultSpan); } }
Pour créer une seule chaîne à partir de deux objets Span
, vous devez les concaténer. Vous pouvez le faire en utilisant la durée inscriptible.
strBegin.CopyTo(resultSpan.Slice(0, 2)); strEnd.CopyTo(resultSpan.Slice(2, 1));
Enfin, convertissons le Span<char>
en string
. Vous pouvez le faire de plusieurs manières, mais les deux commandes les plus pratiques sont les suivantes:
new string(resultSpan)
resultSpan.ToString()
Assistant:
var strBegin = str.AsSpan(0, 2); var strEnd = str.AsSpan(str.Length - 1, 1);
Usage:
var strBuffer = new char[3]; var resultSpan = new Span<char>(strBuffer);
Essayez ce code-
static void Main(string[] args) { int[] numbers = { 12, 34, 64, 98, 32, 46 }; var finalList = numbers.Skip(2).SkipLast(2).ToArray(); foreach(var item in finalList) { Console.WriteLine(item + ""); } }
Que faire si la chaîne comporte moins de 4 caractères?