Удаление лишних запятых из строки после использования String.Join для преобразования массива в строку (C #) - PullRequest
49 голосов
/ 07 октября 2010

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

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

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

Первый столбец, Третий столбец

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

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

Ответы [ 9 ]

84 голосов
/ 07 октября 2010

Попробуйте это:):

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

Это объединит только те строки, которые не null или "".

34 голосов
/ 07 октября 2010

Простым решением было бы использование 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 голосов
/ 07 октября 2010

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

var joinedString = String.Join(",", array.Where(c => !string.IsNullOrEmpty(c));
1 голос
/ 07 октября 2010
String.Join(",", array.Where(w => !string.IsNullOrEmpty(w));
1 голос
/ 07 октября 2010

Решение регулярных выражений:

yourString = new Regex(@"[,]{2,}").Replace(yourString, @",");
1 голос
/ 07 октября 2010

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

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();
}
0 голосов
/ 26 октября 2017

Простой метод расширения

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);
0 голосов
/ 06 декабря 2013
string.Join(",", string.Join(",", array).Split({","}, StringSplitOptions.RemoveEmptyEntries));

v ('_') V

0 голосов
/ 24 августа 2011
string.Join(",", Array.FindAll(array, a => !String.IsNullOrEmpty(a)));

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

...