Programmation .Net - Indépendance financière

Concaténation de strings et le StringBuilder en Visual Basic/C#

Dans ce tutoriel nous allons explorer la concaténation de chaînes de caractères. C’est un concept très important dans n’importe quel langage de programmation et Visual Basic et C# n’y font pas exception. Vous verrez que ce n’est pas les options qui manquent dans la façon de joindre les chaînes ensemble, vous pourrez utiliser l’une ou l’autre dépendamment de votre préférence ou encore de la situation.

Concaténation de String

Ça fait un petit bout qu’on les utilisent déjà j’en conviens, mais je veux juste mettre les choses plus au clair. Il y a quatre façons principales de joindre des chaînes de caractères dans ces deux langages.

Vous pouvez:
utiliser les opérateurs “+” (C#) et “&” (Visual Basic);
utiliser le StringBuilder;
utiliser le String.Format;
utiliser le $””.

Voyons quelques exemples et explications ci-dessous.

Opérateurs + et &

Voici comment utiliser le “+” (C#) et le “&” (Visual Basic), remarquez comment le &= et += sont équivalent à faire :

Visual Basic: variable = variable & “Hello”
C#: variable = variable + “Hello”;

Vous pouvez aussi en chaîner autant que vous voulez en ajoutant toujours des opérateurs &/+, comme ceci :

Visual Basic: variable = variable & “Hello” & ” how are you?”
C#: variable = variable + “Hello” + ” how are you?”;

Vous pouvez même joindre des variables à l’intérieur comme variableTwo qui aurait été déclaré avant :

Visual Basic: variable = variable & “Hello” & ” how are you?” & variableTwo
C#: variable = variable + “Hello” + ” how are you?” + variableTwo;

Pour un exemple plus concret utilisé dans une boucle.

Visual Basic

Option Strict On
Option Explicit On

Module Program

    Sub Main()
        ' Opérateur "&"
        ' On commence par créer une variable initiale disons "Start".
        Dim finalString As String = "Start"

        ' Ensuite on ajoutera 1000 occurences de "Step".
        For Index As Integer = 0 To 1000 Step 1
            finalString &= "Step"
        Next

        ' Et finalement le mot "Finish" à la fin de notre chaîne.
        finalString &= "Finish"

        Console.WriteLine(finalString)

        ' Cette instruction arrêtera l'exécution de la console en attendant une touche du clavier.
        Console.ReadKey()
    End Sub

End Module

C#

using System;

namespace StringConcatenationCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Opérateur "&"
            // On commence par créer une variable initiale disons "Start".
            string finalString = "Start";

            // Ensuite on ajoutera 1000 occurences de "Step".
            for (int index = 0; index <= 1000; index++)
                finalString += "Step";

            // Et finalement le mot "Finish" à la fin de notre chaîne.
            finalString += "Finish";

            Console.WriteLine(finalString);

            // Cette instruction arrêtera l'exécution de la console en attendant une touche du clavier.
            Console.ReadKey();
        }
    }
}

Note: n’oubliez pas de changer le namespace pour le nom de votre projet. Il s’agit aussi d’une application de type console que j’utilise pour l’exemple.

La classe StringBuilder

Le StringBuilder est une classe et vous pouvez la voir comme une chaîne de caractère conventionnelle, mais accessible à l’aide de méthodes. Pour ajouter de l’information on utilisera Append() ou encore AppendLine() pour ajouter du texte avec une fin de ligne. Voici ce que le code précédent aura l’air en utilisant le StringBuilder.

Visual Basic

Option Strict On
Option Explicit On
Imports System.Text

Module Program

    Sub Main()
        ' StringBuilder
        ' Déclaration et initialisation du StringBuilder!
        Dim activeStringBuilder As StringBuilder = New StringBuilder

        ' On ajoute "Start".
        activeStringBuilder.Append("Start")

        ' On ajoutera ensuite 1000 occurences de "Step".
        For Index As Integer = 0 To 1000 Step 1
            activeStringBuilder.Append("Step")
        Next

        ' On ajoute finalement "Finish" au StringBuilder.
        activeStringBuilder.Append("Finish")

        ' La méthode ToString() nous donnera le contenu complet sous la forme d'une chaîne de caractères.
        Console.WriteLine(activeStringBuilder.ToString())
        Console.ReadKey()
    End Sub

End Module

C#

using System;
using System.Text;

namespace StringConcatenationCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            // StringBuilder
            // Déclaration et initialisation du StringBuilder!
            StringBuilder stringBuilder = new StringBuilder();

            // On ajoute "Start".
            stringBuilder.Append("Start");

            // On ajoutera ensuite 1000 occurences de "Step".
            for (int index = 0; index <= 1000; index++)
                stringBuilder.Append("Step");

            // On ajoute finalement "Finish" au StringBuilder.
            stringBuilder.Append("Finish");

            // La méthode ToString() nous donnera le contenu complet sous la forme d'une chaîne de caractères.
            Console.WriteLine(stringBuilder.ToString());
            Console.ReadKey();
        }
    }
}

Remarquez que le StringBuilder utilise la méthode ToString() pour sortir la chaîne de l’intérieur et la mettre dans la console. Il ne faut pas oublier que l’appel de cette méthode n’efface pas la chaîne, on doit appeler Clear() si on veut supprimer ce qu’il y a dans le StringBuilder.

String.Format

String.Format() prendra une chaîne de caractère comme premier paramètre à laquelle nous devrons ajouter “{0}”, “{1}” etc en accordance avec les paramètres suivants qui remplaceront les chiffres dans l’ordre. Ça commence à 0 puisqu’il s’agit d’un tableau. L’exemple suivant vous montre un peu mieux ce dont je parle.

Visual Basic

Option Strict On
Option Explicit On
Imports System.Text

Module Program

    Sub Main()
        ' String.Format()
        ' Je déclare et initialise deux variables.
        Dim name As String = "Alexandre"
        Dim age As Integer = 29

        ' Ensuite je crée la chaîne de caractères en sortie avec String.Format, remarquez que le {0} sera remplacé par la valeur de la variable name
        ' et le {1} par la valeur de la variable age.
        Dim formattedString As String = String.Format("Bonjour, mon nom est {0}, et j'ai {1} ans!", name, age)

        Console.WriteLine(formattedString)
        Console.ReadKey()
    End Sub

End Module

C#

using System;
using System.Text;

namespace StringConcatenationCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Je déclare et initialise deux variables.
            string name = "Alexandre";
            int age = 29;
        
            // Ensuite je crée la chaîne de caractères en sortie avec String.Format, remarquez que le {0} sera remplacé par la valeur de la variable name
            // et le {1} par la valeur de la variable age.
            string formattedString = String.Format("Bonjour, mon nom est {0}, et j'ai {1} ans!", name, age);

            Console.WriteLine(formattedString);
            Console.ReadKey();
        }
    }
}

Expression $””

Celui-là est un peu plus récent et nous permet de mettre des variables directement dans la chaîne de caractères. À mon avis, ça rend le code un peu plus clair que les autres méthodes vues précédemment. Assurez-vous simplement de ne pas oublier le signe $ avant la chaîne de caractère.

Visual Basic

Option Strict On
Option Explicit On
Imports System.Text

Module Program

    Sub Main()
        ' $""
        ' Je déclare et initialise deux chiffres à utiliser dans la chaîne de caractères.
        Dim firstNumber As Integer = 9
        Dim secondNumber As Integer = 5

        ' Remarquez que vous pouvez même faire des opérations arithmétiques entre les {}. Comme avec le String.Format mais directement
        ' à l'intérieur de la chaîne. C'est aussi plus facile à lire honnêtement que {0} et {1}.
        Dim formattedStringWithDollarSign As String = $"The sum of {firstNumber} and {secondNumber} is {firstNumber + secondNumber}!"

        Console.WriteLine(formattedStringWithDollarSign)
        Console.ReadKey()
    End Sub

End Module

C#

using System;
using System.Text;

namespace StringConcatenationCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            // $""
            // Je déclare et initialise deux chiffres à utiliser dans la chaîne de caractères.
            decimal firstNumber = 9;
            decimal secondNumber = 5;

            // Je déclare et initialise deux chiffres à utiliser dans la chaîne de caractères.
            // à l'intérieur de la chaîne. C'est aussi plus facile à lire honnêtement que {0} et {1}.
            string formattedStringWithDollarSign = $"The sum of {firstNumber} and {secondNumber} is {firstNumber + secondNumber}!";

            Console.WriteLine(formattedStringWithDollarSign);
            Console.ReadKey();
        }
    }
}

Cette technique de concaténation est ma préférée mis à part lorsque j’utilise les boucles, à ce moment-là j’utiliserai le StringBuilder parce qu’il est plus performant!. Néanmoins, je vous suggère fortement de considérer le $”” avant le String.Format si vous faites uniquement de la concaténation.

En bref

Si vous souhaitez concaténer des chaînes de caractères vous pouvez utiliser le “&” (Visual Basic) ou encore le “+” (C#) mais le StringBuilder reste le meilleur choix pour des concaténations en bonne quantité et honnêtement le String.Format et le $”” sont souvent plus esthétiquement attrayant. Finalement, gardez quand même en tête le String.Format pour appliquer des formats particuliers comme des dates ou autre.

Pour plus d’information, vous pouvez consulter directement le site de Microsoft à cette adresse!

Code complet en Visual Basic et en C#

Visual Basic

Option Strict On
Option Explicit On
Imports System.Text

Module Program

    Sub Main()
        ' Opérateur "&"
        ' On commence par créer une variable initiale disons "Start".
        Dim finalString As String = "Start"

        ' Ensuite on ajoutera 1000 occurences de "Step".
        For Index As Integer = 0 To 1000 Step 1
            finalString &= "Step"
        Next

        ' Et finalement le mot "Finish" à la fin de notre chaîne.
        finalString &= "Finish"

        Console.WriteLine(finalString)

        ' Cette instruction arrêtera l'exécution de la console en attendant une touche du clavier.
        Console.ReadKey()


        ' StringBuilder
        ' Déclaration et initialisation du StringBuilder!
        Dim activeStringBuilder As StringBuilder = New StringBuilder

        ' On ajoute "Start".
        activeStringBuilder.Append("Start")

        ' On ajoutera ensuite 1000 occurences de "Step".
        For Index As Integer = 0 To 1000 Step 1
            activeStringBuilder.Append("Step")
        Next

        ' On ajoute finalement "Finish" au StringBuilder.
        activeStringBuilder.Append("Finish")

        ' La méthode ToString() nous donnera le contenu complet sous la forme d'une chaîne de caractères.
        Console.WriteLine(activeStringBuilder.ToString())
        Console.ReadKey()


        ' String.Format()
        ' Je déclare et initialise deux variables.
        Dim name As String = "Alexandre"
        Dim age As Integer = 29

        ' Ensuite je crée la chaîne de caractères en sortie avec String.Format, remarquez que le {0} sera remplacé par la valeur de la variable name
        ' et le {1} par la valeur de la variable age.
        Dim formattedString As String = String.Format("Bonjour, mon nom est {0}, et j'ai {1} ans!", name, age)

        Console.WriteLine(formattedString)
        Console.ReadKey()


        ' $""
        ' Je déclare et initialise deux chiffres à utiliser dans la chaîne de caractères.
        Dim firstNumber As Integer = 9
        Dim secondNumber As Integer = 5

        ' Remarquez que vous pouvez même faire des opérations arithmétiques entre les {}. Comme avec le String.Format mais directement
        ' à l'intérieur de la chaîne. C'est aussi plus facile à lire honnêtement que {0} et {1}.
        Dim formattedStringWithDollarSign As String = $"The sum of {firstNumber} and {secondNumber} is {firstNumber + secondNumber}!"

        Console.WriteLine(formattedStringWithDollarSign)
        Console.ReadKey()
    End Sub

End Module

C#

using System;
using System.Text;

namespace StringConcatenationCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Opérateur "&"
            // On commence par créer une variable initiale disons "Start".
            string finalString = "Start";

            // Ensuite on ajoutera 1000 occurences de "Step".
            for (int index = 0; index <= 1000; index++)
                finalString += "Step";

            // Et finalement le mot "Finish" à la fin de notre chaîne.
            finalString += "Finish";

            Console.WriteLine(finalString);

            // Cette instruction arrêtera l'exécution de la console en attendant une touche du clavier.
            Console.ReadKey();


            // StringBuilder
            // Déclaration et initialisation du StringBuilder!
            StringBuilder stringBuilder = new StringBuilder();

            // On ajoute "Start".
            stringBuilder.Append("Start");

            // On ajoutera ensuite 1000 occurences de "Step".
            for (int index = 0; index <= 1000; index++)
                stringBuilder.Append("Step");

            // On ajoute finalement "Finish" au StringBuilder.
            stringBuilder.Append("Finish");

            // La méthode ToString() nous donnera le contenu complet sous la forme d'une chaîne de caractères.
            Console.WriteLine(stringBuilder.ToString());
            Console.ReadKey();


            // String.Format()
            // Je déclare et initialise deux variables.
            string name = "Alexandre";
            int age = 29;

            // Ensuite je crée la chaîne de caractères en sortie avec String.Format, remarquez que le {0} sera remplacé par la valeur de la variable name
            // et le {1} par la valeur de la variable age.
            string formattedString = String.Format("Bonjour, mon nom est {0}, et j'ai {1} ans!", name, age);

            Console.WriteLine(formattedString);
            Console.ReadKey();


            // $""
            // Je déclare et initialise deux chiffres à utiliser dans la chaîne de caractères.
            decimal firstNumber = 9;
            decimal secondNumber = 5;

            // Je déclare et initialise deux chiffres à utiliser dans la chaîne de caractères.
            // à l'intérieur de la chaîne. C'est aussi plus facile à lire honnêtement que {0} et {1}.
            string formattedStringWithDollarSign = $"The sum of {firstNumber} and {secondNumber} is {firstNumber + secondNumber}!";

            Console.WriteLine(formattedStringWithDollarSign);
            Console.ReadKey();
        }
    }
}

Vous avez trouvé un bogue dans mon code? C’est possible, veuillez m’envoyer un message en utilisant mon formulaire de contact pour que je puisse remédier à la situation aussi rapidement que possible!

YouTube

Next article Comment fonctionnent les tableaux à 1 et 2 dimensions en Visual Basic
Previous article Les boucles en Visual Basic - Exercice et solution

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *