В C #: добавление кавычек вокруг строки в списке строк, разделенных запятыми - PullRequest
50 голосов
/ 31 октября 2008

Это, вероятно, простой ответ, но мне не хватило кофе, чтобы понять это самостоятельно:

Если бы у меня была строка с запятой, такая как:

string list = "Fred,Sam,Mike,Sarah";

Как получить каждый элемент, добавить кавычки вокруг него и вставить его обратно в строку, например:

string newList = "'Fred','Sam','Mike','Sarah'";

Я предполагаю, что итерации по каждому из них были бы началом, но после этого я был озадачен.

Одно уродливое решение:

int number = 0;
string newList = "";
foreach (string item in list.Split(new char[] {','}))
{
    if (number > 0)
    {
        newList = newList + "," + "'" + item + "'";
    }
    else
    {
        newList = "'" + item + "'";
    }
    number++;
}

Ответы [ 15 ]

77 голосов
/ 31 октября 2008
string s = "A,B,C";
string replaced = "'"+s.Replace(",", "','")+"'";

Спасибо за комментарии, я пропустил внешние цитаты.

Конечно ... если бы источником была пустая строка, вы хотели бы добавить кавычки или нет? А что, если на входе была куча пробелов ...? Я имею в виду, чтобы получить 100% полное решение, я, вероятно, попросил бы список модульных тестов, но я надеюсь, что мой инстинкт инстинкт ответил на ваш основной вопрос.

Обновление : также была предложена альтернатива на основе LINQ (с дополнительным преимуществом использования String.Format и, следовательно, без необходимости беспокоиться о ведущих / конечных кавычках):

string list = "Fred,Sam,Mike,Sarah";
string newList = string.Join(",", list.Split(',').Select(x => string.Format("'{0}'", x)).ToList());
23 голосов
/ 31 октября 2008
string[] bits = list.Split(','); // Param arrays are your friend
for (int i=0; i < bits.Length; i++)
{
    bits[i] = "'" + bits[i] + "'";
}
return string.Join(",", bits);

Или вы можете использовать LINQ, особенно с версией String.Join, которая поддерживает IEnumerable<string> ...

return list.Split(',').Select(x => "'" + x + "'").JoinStrings(",");

В SO в других местах есть реализация JoinStrings ... Я поищу ее.

РЕДАКТИРОВАТЬ: Ну, это не совсем JoinStrings, о которых я думал, поэтому вот оно:

public static string JoinStrings<T>(this IEnumerable<T> source, 
                                    string separator)
{
    StringBuilder builder = new StringBuilder();
    bool first = true;
    foreach (T element in source)
    {
        if (first)
        {
            first = false;
        }
        else
        {
            builder.Append(separator);
        }
        builder.Append(element);
    }
    return builder.ToString();
}

В наши дни string.Join имеет вместо этого общую перегрузку, так что вы можете просто использовать:

return string.Join(",", list.Split(',').Select(x => $"'{x}'"));
18 голосов
/ 14 марта 2012

Следуя приведенному выше примеру Джона Скита, это то, что сработало для меня. У меня уже была переменная List<String> с именем __messages, вот что я сделал:

string sep = String.Join(", ", __messages.Select(x => "'" + x + "'"));
16 голосов
/ 31 октября 2008
string[] splitList = list.Split(',');
string newList = "'" + string.Join("','", splitList) + "'";
4 голосов
/ 31 октября 2008

Я думаю, что самой простой вещью будет Split, а затем Join.

string nameList = "Fred,Sam,Mike,Sarah";
string[] names = nameList.Split(',');
string quotedNames = "'" + string.Join("','", names) + "'";
2 голосов
/ 31 октября 2008

Я не могу написать код C #, но этот простой код JavaScript, вероятно, легко адаптировать:

var s = "Fred,Sam,Mike,Sarah";
alert(s.replace(/\b/g, "'"));

Он просто заменяет границы (начало / конец строки, переход от символов без пунктуации) на одинарные кавычки.

1 голос
/ 17 февраля 2015

Мои требования:

  1. Разделяйте элементы запятыми.
  2. Обернуть все элементы в списке в двойные кавычки.
  3. Выход из существующих двойных кавычек в строке.
  4. Обрабатывать нулевые строки, чтобы избежать ошибок.
  5. Не беспокойтесь оборачивая пустые строки в двойные кавычки.
  6. Завершается возвратом каретки и переводом строки.

    string.Join (",", lCol.Select (s => s == null? Null: ("\" "+ s.Replace (" \ "", "\" \ "") + "\ ""))) + "\ r \ n";

1 голос
/ 17 апреля 2013

Если вы используете JSON, следующая функция поможет

var string[] keys = list.Split(',');
console.log(JSON.stringify(keys));
1 голос
/ 31 октября 2008
string list = "Fred,Sam,Mike,Sarah";

string[] splitList = list.Split(',');

for (int i = 0; i < splitList.Length; i++)
    splitList[i] = String.Format("'{0}'", splitList[i]);

string newList = String.Join(",", splitList);
0 голосов
/ 01 сентября 2016

Для людей, которые любят методы расширения, такие как я, вот оно:

    public static string MethodA(this string[] array, string seperatedCharecter = "|")
    {
        return array.Any() ? string.Join(seperatedCharecter, array) : string.Empty;
    }

    public static string MethodB(this string[] array, string seperatedChar = "|")
    {
        return array.Any() ? MethodA(array.Select(x => $"'{x}'").ToArray(), seperatedChar) : string.Empty;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...