0
votes

Récupère les deux premier et dernier caractères d'une chaîne C #

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


1 commentaires

Que faire si la chaîne comporte moins de 4 caractères?


4 Réponses :


2
votes

À 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


3 commentaires

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.



1
votes

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) ;
}


0 commentaires

0
votes

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);


0 commentaires

0
votes

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 + "");
        }
    }


0 commentaires