Подтвердить что ты не робот

Удаление дополнительных запятых из строки после использования String.Join для преобразования массива в строку (С#)

Я конвертирую массив в строку, используя String.Join. У меня небольшая проблема в том, что в массиве некоторые позиции индекса будут пустыми. Пример ниже:

array[1] = "Firstcolumn"
array[3] = "Thirdcolumn"

Используя String.Join(",", array); я получу следующее:

Firstcolumn, Thirdcolumn

Обратите внимание на дополнительные ,.

Как я могу удалить лишние запятые из строки или в идеале не включать пустые индексы при использовании String.Join?

4b9b3361

Ответ 1

Попробуйте следующее:):

var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)));

Это будет соединяться только с строками, которые не являются null или "".

Ответ 2

Простым решением было бы использовать linq, отфильтровывая пустые элементы перед присоединением.

// .net 3.5
string.Join(",", array.Where(item => !string.IsNullOrEmpty(item)).ToArray());

В .NET 4.0 вы также можете использовать string.IsNullOrWhiteSpace, если вы также хотите отфильтровать элементы, которые пусты или состоят из (обратите внимание, что в .NET 4.0 вам не нужно вызывать ToArray в этом случае):

// .net 4.0
string.Join(",", array.Where(item => !string.IsNullOrWhiteSpace(item)));

Ответ 3

Вы можете использовать linq для удаления пустых полей.

var joinedString = String.Join(",", array.Where(c => !string.IsNullOrEmpty(c));

Ответ 4

Метод расширения:

public static string ToStringWithoutExtraCommas(this object[] array)
{
    StringBuilder sb = new StringBuilder();
    foreach (object o in array)
    {

        if ((o is string && !string.IsNullOrEmpty((string)o)) || o != null)
            sb.Append(o.ToString()).Append(",");
    }

    sb.Remove(sb.Length - 1, 1);

    return sb.ToString();
}

Ответ 5

Регулярное выражение:

yourString = new Regex(@"[,]{2,}").Replace(yourString, @",");

Ответ 6

String.Join(",", array.Where(w => !string.IsNullOrEmpty(w));

Ответ 7

string.Join(",", Array.FindAll(array, a => !String.IsNullOrEmpty(a)));

Как насчет этого? Минусы и плюсы по сравнению с решением LINQ? По крайней мере, он короче.

Ответ 8

string.Join(",", string.Join(",", array).Split({","}, StringSplitOptions.RemoveEmptyEntries));

v ( '_') В

Ответ 9

Простой способ расширения

namespace System
{
    public static class Extenders
    {
        public static string Join(this string separator, bool removeNullsAndWhiteSpaces, params string[] args)
        {
            return removeNullsAndWhiteSpaces ? string.Join(separator, args?.Where(s => !string.IsNullOrWhiteSpace(s))) : string.Join(separator, args);
        }
        public static string Join(this string separator, bool removeNullsAndWhiteSpaces, IEnumerable<string> args)
        {
            return removeNullsAndWhiteSpaces ? string.Join(separator, args?.Where(s => !string.IsNullOrWhiteSpace(s))) : string.Join(separator, args);
        }
    }
}

Использование:

var str = ".".Join(true, "a", "b", "", "c");
//or 
var arr = new[] { "a", "b", "", "c" };
str = ".".Join(true, arr);