перетворити рядковий масив у рядок


155

Я хотів би перетворити рядковий масив в один рядок.

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

Я хотів би мати щось на кшталт "Hello World!"

Відповіді:


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

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

string.Join("", test);

3
+1 - Я видалив простір у приєднанні, щоб зробити це правильним, як вказував @davidg
jmort253

Дякую. Я не помітив пробілу, хоча копію вставив його прямо у свою відповідь.
Дейв Уорд

2
Мені також потрібно було поставити роздільник між моїми рядками (кома та пробіл), тому я використав: var separator = ", "; string.Join(separator , test);
drpawelo

5
Чудова відповідь. Хоча я б запропонував використовувати, string.Join(string.Empty, test)а не використовувати empty-paranthesis.
тепер той, хто не повинен бути названий.

37

Трохи швидший варіант, ніж використання вже згаданого використання Join()методу, є метод Concat () . Для цього не потрібен порожній параметр роздільника Join(). Приклад:

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

string result = String.Concat(test);

отже, швидше за все, швидше.


1
Concatкраще, у внутрішньому коді Join, він додасть роздільник після кожного елемента. Але Concatне мати таких кодів, це простіше і пряміше, ніж Join. Це найкраща відповідь.
Білка. Помер

22

Спробуйте:

String.Join("", test);

яка повинна повернути рядок, що з'єднує два елементи разом. ""вказує на те, що ви хочете, щоб рядки були з'єднані між собою без роздільних знаків.


Хіба це не зробить "HelloWorld!" без пробілу між словами?
jmort253

1
@ jmort253 - Оригінальна рядок "Hello "у запитанні вже мала пробіл. Якби місця вже не було, то ви будете правильно, а використання " "в якості роздільника мало б більше сенсу.
davidg

19

Проста string.Concat () - те, що вам потрібно.

string[] test = new string[2];

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

string result = string.Concat(test);

Якщо вам також потрібно додати сеператор (пробіл, кома тощо), слід використовувати string.Join ().

string[] test = new string[2];

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

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

Якщо вам доведеться виконати це на рядковому масиві з хундерами елементів, ніж string.Join () краще з точки зору performace. Просто наведіть аргумент "" (порожній) як сепаратор. StringBuilder також можна використовувати задля продуктивності, але це зробить код трохи довшим.


Concatі Joinшвидше, ніж StringBuilderякщо у вас є 4 або менше рядків для об'єднання.
Якісний каталізатор

3

Aggregate також можна використовувати для того ж.

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

1
Це надзвичайно марнотратний спосіб втілення String.Joinзавдяки безлічі побудованих додаткових рядків. Будь ласка, прочитайте stackoverflow.com/questions/217805/… для правильного варіанту Aggregate.
Олексій Левенков

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
Це просто вручну реалізувати string.Join(" ", array)(за винятком того, що ваш додає пробіл). Чому б просто не використовувати той, який знаходиться в бібліотеці?
davidg

1
@davidg - Ашвіні, напевно, новий. Навчання використовувати існуючі інструменти та перемагати менталітет коледжу вимагає звикання. Це зробило для мене. Врешті-решт, люди задаються питанням, чому їхні колеги здатні кодувати кола навколо них, а потім вони бачать значення в бібліотеках коду та використовують їх повторно.
jmort253

що б я не запам'ятав, я намагався допомогти це все. Якщо у когось є краще рішення, ти завжди вільний, щоб його опублікувати .. @jmort: минуло 4 роки, як я працюю ... у мене немає менталітету wht ур говорити доречно ... ніхто не ідеальний ... за багаторічний досвід ви дізнаєтесь .. сподівайтеся, не заперечуйте цього факту ..
програміст

@Ashwini - не намагався образити тебе. Щойно відповідаю на питання @ davidg на основі мого досвіду роботи з різними інженерами.
jmort253

2
Крім того, з'єднана рядок матиме додатковий простір, закріплений на її кінці. Отже, це не повністю відповідає питанню.
jmort253

0

Я використовував цей спосіб, щоб зробити свій проект швидшим:

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

return text;

RichTextBox.Text автоматично перетворить ваш масив у рядковий рядок!


-1

У прийнятій відповіді, String.Join не найкраща практика щодо її використання. String.Concat слід було б використовувати, оскільки OP включив проміжок у першому пункті: "Привіт" (замість того, щоб використовувати нульовий роздільник).

Однак, оскільки ОП попросив отримати результат "Привіт, світ!", String.Join все ще є відповідним методом, але пробіл пробілів слід перемістити на роздільник.

// 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

Подобається це:

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

Ви також можете використовувати цикл:

for(int i=0; i<2; i++)
    str += test[i];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.