przekonwertuj tablicę ciągów na ciąg

155

Chciałbym przekonwertować tablicę ciągów na pojedynczy ciąg.

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

Chciałbym mieć coś takiego jak „Hello World!”

John Saunders
źródło

Odpowiedzi:

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

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

string.Join("", test);
Dave Ward
źródło
3
+1 - Usunąłem spację w Join, aby to poprawić, jak wskazał @davidg
jmort253
Dzięki. Nie zauważyłem spacji na końcu, mimo że skopiowałem ją i wkleiłem bezpośrednio do mojej odpowiedzi.
Dave Ward
2
Musiałem również wstawić separator między ciągami (koma i spacja), więc użyłem: var separator = ", "; string.Join(separator , test);
drpawelo
5
Świetna odpowiedź. Chociaż sugerowałbym string.Join(string.Empty, test)raczej używanie niż używanie empty-paranthesis.
teraz ten, którego nie można nazwać.
37

Nieco szybszą opcją niż użycie wspomnianej już Join()metody jest metoda Concat () . Nie wymaga tak jak pustego parametru separatora Join(). Przykład:

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

string result = String.Concat(test);

stąd prawdopodobnie szybciej.

Wysokiej jakości katalizator
źródło
1
Concatjest lepiej, w kodzie wewnętrznym Joindoda separator po każdym elemencie. Ale Concatnie ma takich kodów, jest prostszy i bardziej bezpośredni niż Join. To jest najlepsza odpowiedź.
Squirrel.Downy
22

Próbować:

String.Join("", test);

co powinno zwrócić łańcuch łączący dwa elementy razem. ""wskazuje, że chcesz, aby ciągi były połączone ze sobą bez żadnych separatorów.

davidg
źródło
Czy nie spowodowałoby to „HelloWorld!” bez spacji między słowami?
jmort253
1
@ jmort253 - Oryginalny ciąg "Hello "w pytaniu miał już spację na końcu. Gdyby jeszcze nie było miejsca, miałbyś rację, a użycie go " "jako separatora miałoby większy sens.
davidg
19

Potrzebujesz prostego ciągu znaków.Concat ().

string[] test = new string[2];

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

string result = string.Concat(test);

Jeśli potrzebujesz również dodać separator (spacja, przecinek itp.), Powinieneś użyć string.Join ().

string[] test = new string[2];

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

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

Jeśli musisz to zrobić na tablicy ciągów zawierającej setki elementów, niż string.Join () jest lepsza z punktu widzenia wydajności. Po prostu podaj "" (pusty) argument jako separator. StringBuilder może być również używany ze względu na wydajność, ale sprawi, że kod będzie nieco dłuższy.

ePandit
źródło
Concati Joinsą szybsze niż StringBuilderjeśli masz 4 lub mniej ciągów do połączenia.
Quality Catalyst
3

Aggregate może być również używany do tego samego.

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";
string joinedString = test.Aggregate((prev, current) => prev + " " + current);
vivek nuna
źródło
1
Jest to niezwykle marnotrawna metoda do wdrożenia String.Joinze względu na wiele dodatkowych ciągów. Przeczytaj stackoverflow.com/questions/217805/…, aby zapoznać się z prawidłowym wariantem 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();
    }
programista
źródło
3
To jest po prostu ręczne implementowanie string.Join(" ", array)(z wyjątkiem twojego dodaje spację na końcu). Dlaczego nie skorzystać po prostu z tego w bibliotece?
davidg
1
@davidg - Ashwini jest prawdopodobnie nowa. Nauka korzystania z istniejących narzędzi i radzenie sobie z mentalnością „Muszę to zrobić sam” w college'u wymaga trochę przyzwyczajenia. Zrobiło to dla mnie. W końcu ludzie zastanawiają się, dlaczego ich koledzy są w stanie kodować kręgi wokół nich, a potem dostrzegają wartość w bibliotekach kodu i ponownie je wykorzystują.
jmort253
cokolwiek sobie przypomniałem, próbowałem pomóc, to wszystko ... jeśli ktoś ma lepsze rozwiązanie, zawsze możesz je opublikować .. @jmort: minęły 4 lata odkąd pracuję ... nie mam mentalności wht ur talking abt ... nikogo nie jest doskonały ... przez lata doświadczeniem nauczysz ..hope u nie zaprzecza tego faktu ..
programista
@Ashwini - nie próbowałem cię urazić. Odpowiadam tylko na pytanie @ davidg w oparciu o moje doświadczenie w pracy z różnymi inżynierami.
jmort253
2
Ponadto połączony ciąg będzie miał dodatkową spację przypiętą do końca. Więc to nie w pełni odpowiada na pytanie.
jmort253
0

Wykorzystałem ten sposób, aby przyspieszyć mój projekt:

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

return text;

RichTextBox.Text automatycznie skonwertuje twoją tablicę na ciąg wielowierszowy!

Bamdad
źródło
-1

W przyjętej odpowiedzi, String.Join nie jest najlepszą praktyką w jej użyciu. Należy użyć String.Concat, ponieważ OP zawierał spację końcową w pierwszym elemencie: „Hello” (zamiast używać ogranicznika null).

Jednakże, ponieważ OP poprosił o wynik „Hello World!”, String.Join jest nadal odpowiednią metodą, ale końcowe białe znaki powinny zostać przeniesione do separatora.

// 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
źródło
-4

Lubię to:

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

Możesz także użyć pętli:

for(int i=0; i<2; i++)
    str += test[i];
Canaan
źródło