converti array di stringhe in stringa


155

Vorrei convertire un array di stringhe in una singola stringa.

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

Vorrei avere qualcosa come "Hello World!"

Risposte:


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

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

string.Join("", test);

3
+1 - Ho rimosso lo spazio nel Join per renderlo corretto, come sottolineato da @davidg
jmort253

Grazie. Non ho notato lo spazio finale, anche se ho copiato e incollato nella mia risposta.
Dave Ward,

2
Avevo anche bisogno di mettere un separatore tra le mie stringhe (coma e spazio), quindi ho usato: var separator = ", "; string.Join(separator , test);
drpawelo,

5
Bella risposta. Comunque, suggerirei di usare string.Join(string.Empty, test)piuttosto che usare un empty-paranthesis.
ora colui che non deve essere nominato.

37

Un'opzione leggermente più veloce rispetto all'utilizzo del Join()metodo già menzionato è il metodo Concat () . Non richiede un parametro delimitatore vuoto come Join()fa. Esempio:

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

string result = String.Concat(test);

quindi è probabilmente più veloce.


1
Concatè meglio, nel codice interno di Join, aggiungerà il separatore dopo ogni elemento. Ma Concatnon hanno tali codici, è più semplice e diretto di Join. Questa è la risposta adatta.
Squirrel.Downy,

22

Provare:

String.Join("", test);

che dovrebbe restituire una stringa che unisce i due elementi insieme. ""indica che si desidera unire le stringhe senza separatori.


Non sarebbe "HelloWorld!" senza uno spazio tra le parole?
jmort253,

1
@ jmort253 - La stringa originale "Hello "nella domanda aveva già uno spazio finale. Se lo spazio non fosse già presente, allora avresti ragione e l'utilizzo " "come separatore avrebbe più senso.
davidg,

19

Una semplice stringa.Concat () è ciò di cui hai bisogno.

string[] test = new string[2];

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

string result = string.Concat(test);

Se è necessario aggiungere anche un separatore (spazio, virgola ecc.), Utilizzare string.Join ().

string[] test = new string[2];

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

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

Se devi eseguire ciò su una matrice di stringhe con hundereds di elementi rispetto a string.Join () è meglio dal punto di vista delle prestazioni. Fornisci semplicemente un argomento "" (vuoto) come separatore. StringBuilder può anche essere utilizzato per motivi di prestazioni, ma renderà il codice un po 'più lungo.


Concate Joinsono più veloci di StringBuilderse hai 4 o meno stringhe da concatenare.
Catalizzatore di qualità

3

Aggregate può anche essere usato per lo stesso.

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";
string joinedString = test.Aggregate((prev, current) => prev + " " + current);

1
Questo è un metodo estremamente dispendioso da implementare a String.Joincausa di più stringhe extra costruite. Si prega di leggere stackoverflow.com/questions/217805/… per la variante corretta di 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();
    }

3
Questo è solo l'implementazione manuale string.Join(" ", array)(tranne il tuo aggiunge uno spazio finale). Perché non usare solo quello nella libreria?
davidg,

1
@davidg - Ashwini è probabilmente nuovo. Imparare ad usare gli strumenti esistenti e superare la mentalità del college "Devo farlo da solo" richiede un po 'di tempo per abituarsi. Lo ha fatto per me. Alla fine, le persone si chiedono perché i loro colleghi siano in grado di codificare i circoli attorno a loro, e quindi vedono il valore nelle librerie di codici e riutilizzano.
jmort253,

qualunque cosa io abbia ricordato ho cercato di aiutare tutto qui .. se qualcuno ha una soluzione migliore sei sempre libero di pubblicarlo .. @jmort: sono passati 4 anni da quando lavoro ... non ho la mentalità di che stai parlando ... nessuno non è perfetto ... nel corso degli anni di esperienza che impari ... spero che tu non neghi questo fatto ...
programmatore

@Ashwini - Non stavo cercando di offenderti. Ho solo risposto alla domanda di @ davidg in base alla mia esperienza di lavoro con diversi ingegneri.
jmort253,

2
Inoltre, la stringa concatenata avrà uno spazio extra virato sulla sua estremità. Quindi questo non soddisfa pienamente la domanda.
jmort253

0

Ho usato questo modo per rendere il mio progetto più veloce:

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

return text;

RichTextBox.Text convertirà automaticamente il tuo array in una stringa multilinea!


-1

Nella risposta accettata, String.Join non è la migliore pratica per il suo utilizzo. String.Concat avrebbe dovuto essere usato poiché OP includeva uno spazio finale nel primo elemento: "Hello" (invece di usare un delimitatore null).

Tuttavia, poiché OP ha richiesto il risultato "Hello World!", String.Join è ancora il metodo appropriato, ma lo spazio bianco finale deve essere spostato nel delimitatore.

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

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

string[] test = { "Hello", "World" }; // Alternative array creation syntax 
string result = String.Join(" ", test);

-4

Come questo:

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

Puoi anche usare un loop:

for(int i=0; i<2; i++)
    str += test[i];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.