convertir un tableau de chaînes en chaîne

155

Je voudrais convertir un tableau de chaînes en une seule chaîne.

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";

J'aimerais avoir quelque chose comme "Hello World!"

John Saunders
la source

Réponses:

281
string[] test = new string[2];

test[0] = "Hello ";
test[1] = "World!";

string.Join("", test);
Dave Ward
la source
3
+1 - J'ai supprimé l'espace dans la jointure pour que cela soit correct, comme indiqué par @davidg
jmort253
Merci. Je n'ai pas remarqué l'espace de fin, même si je l'ai copié-collé directement dans ma réponse.
Dave Ward
2
J'avais aussi besoin de mettre un séparateur entre mes cordes (coma et espace) donc j'ai utilisé: var separator = ", "; string.Join(separator , test);
drpawelo
5
Très bonne réponse. Cependant, je suggérerais d'utiliser string.Join(string.Empty, test)plutôt que d'utiliser un fichier empty-paranthesis.
maintenant celui qui ne doit pas être nommé.
37

Une option légèrement plus rapide que l'utilisation de l'utilisation déjà mentionnée de la Join()méthode est la méthode Concat () . Il ne nécessite pas de paramètre de délimiteur vide comme le Join()fait. Exemple:

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";

string result = String.Concat(test);

par conséquent, il est probablement plus rapide.

Catalyseur de qualité
la source
1
Concatest mieux, dans le code interne de Join, il ajoutera un séparateur après chaque élément. Mais Concatne pas avoir de tels codes, c'est plus simple et plus direct que Join. C'est la première réponse.
Squirrel.Downy
22

Essayer:

String.Join("", test);

qui doit renvoyer une chaîne joignant les deux éléments ensemble. ""indique que vous souhaitez que les chaînes soient jointes sans séparateurs.

Davidg
la source
Cela ne ferait-il pas "HelloWorld!" sans espace entre les mots?
jmort253
1
@ jmort253 - La chaîne d'origine "Hello "de la question contenait déjà un espace à la fin. Si l'espace n'était pas déjà là, alors vous auriez raison, et utiliser " "comme séparateur aurait plus de sens.
davidg
19

Vous avez besoin d'une simple chaîne: Concat ().

string[] test = new string[2];

test[0] = "Hello ";
test[1] = "World!";

string result = string.Concat(test);

Si vous devez également ajouter un séparateur (espace, virgule, etc.), string.Join () doit être utilisé.

string[] test = new string[2];

test[0] = "Red";
test[1] = "Blue";

string result = string.Join(",", test);

Si vous devez effectuer cela sur un tableau de chaînes avec des centaines d'éléments que string.Join () est meilleur du point de vue de la performance. Donnez simplement un argument "" (vide) comme séparateur. StringBuilder peut également être utilisé pour des raisons de performances, mais cela rendra le code un peu plus long.

ePandit
la source
Concatet Joinsont plus rapides que StringBuildersi vous avez 4 chaînes ou moins à concaténer.
Quality Catalyst
3

Aggregate peut également être utilisé pour le même.

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";
string joinedString = test.Aggregate((prev, current) => prev + " " + current);
vivek nuna
la source
1
Il s'agit d'une méthode extrêmement inutile à mettre String.Joinen œuvre en raison de la construction de plusieurs chaînes supplémentaires. Veuillez lire stackoverflow.com/questions/217805/… pour la variante appropriée de Aggregate.
Alexei Levenkov
1
    string ConvertStringArrayToString(string[] array)
    {
        //
        // Concatenate all the elements into a StringBuilder.
        //
        StringBuilder strinbuilder = new StringBuilder();
        foreach (string value in array)
        {
            strinbuilder.Append(value);
            strinbuilder.Append(' ');
        }
        return strinbuilder.ToString();
    }
programmeur
la source
3
Ceci est juste une implémentation manuelle string.Join(" ", array)(sauf que le vôtre ajoute un espace de fin). Pourquoi ne pas simplement utiliser celui de la bibliothèque?
davidg
1
@davidg - Ashwini est probablement nouveau. Apprendre à utiliser les outils existants et surmonter la mentalité du «je dois le faire moi-même» de l'université demande du temps pour s'y habituer. Ça l'a fait pour moi. Finalement, les gens se demandent pourquoi leurs collègues sont capables de coder des cercles autour d'eux, puis ils voient la valeur dans les bibliothèques de code et les réutilisent.
jmort253
tout ce dont je me souviens, j'ai essayé d'aider c'est tout..si quelqu'un a une meilleure solution, vous êtes toujours libre de la poster .. @jmort: ça fait 4 ans que je travaille ... je n'ai pas la mentalité de wht ur parler abt ... n'importe qui n'est pas parfait ... au fil des années d'expérience que vous apprenez .. j'espère que vous ne niez pas ce fait ..
programmeur
@Ashwini - N'essayait pas de vous offenser. Je réponds simplement à la question de @ davidg basée sur mon expérience de travail avec différents ingénieurs.
jmort253
2
En outre, la chaîne concaténée aura un espace supplémentaire attaché à son extrémité. Cela ne répond donc pas entièrement à la question.
jmort253
0

J'ai utilisé cette méthode pour accélérer mon projet:

RichTextBox rcbCatalyst = new RichTextBox()
{
    Lines = arrayString
};
string text = rcbCatalyst.Text;
rcbCatalyst.Dispose();

return text;

RichTextBox.Text convertira automatiquement votre tableau en une chaîne multiligne!

Bamdad
la source
-1

Dans la réponse acceptée, String.Join n'est pas la meilleure pratique selon son utilisation. String.Concat aurait dû être utilisé car OP incluait un espace de fin dans le premier élément: "Hello" (au lieu d'utiliser un délimiteur nul).

Cependant, puisque OP a demandé le résultat "Hello World!", String.Join est toujours la méthode appropriée, mais l'espace blanc de fin doit être déplacé vers le délimiteur à la place.

// string[] test = new string[2];

// test[0] = "Hello ";
// test[1] = "World!";

string[] test = { "Hello", "World" }; // Alternative array creation syntax 
string result = String.Join(" ", test);
Sir Charles Facehuggersworth
la source
-4

Comme ça:

string str= test[0]+test[1];

Vous pouvez également utiliser une boucle:

for(int i=0; i<2; i++)
    str += test[i];
Canaan
la source