Самый простой способ разобрать строку с запятой в некотором объекте, который я могу перебрать, чтобы получить доступ к отдельным значениям? - PullRequest
56 голосов
/ 10 февраля 2010

Какой самый простой способ разбить список значений строки, разделенных запятыми, в какой-то объект, через который я могу перейти, чтобы я мог легко получить доступ к отдельным значениям?

пример строки: "0, 10, 20, 30, 100, 200"

Я немного новичок в C #, так что прости меня за такой простой вопрос, как этот. Спасибо.

Ответы [ 6 ]

135 голосов
/ 10 февраля 2010

есть ошибки с этим - но в конечном итоге самый простой способ будет использовать

string s = [yourlongstring];
string[] values = s.Split(',');

Если количество запятых и записей не важно, и вы хотите избавиться от «пустых» значений, тогда вы можете использовать

string[] values = s.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

Одна вещь, хотя - это сохранит любой пробел до и после ваших строк. Вы можете использовать немного магии Linq, чтобы решить это:

string[] values = s.Split(',').Select(sValue => sValue.Trim()).ToArray();

Это если вы используете .Net 3.5 и у вас есть объявление с помощью System.Linq в верхней части исходного файла.

23 голосов
/ 10 февраля 2010
   var stringToSplit = "0, 10, 20, 30, 100, 200";

    // To parse your string 
    var elements = test.Split(new[]
    { ',' }, System.StringSplitOptions.RemoveEmptyEntries);

    // To Loop through
    foreach (string items in elements)
    {
       // enjoy
    }
8 голосов
/ 10 февраля 2010

Используйте Linq, это очень быстрый и простой способ.

string mystring = "0, 10, 20, 30, 100, 200";

var query = from val in mystring.Split(',')
            select int.Parse(val);
foreach (int num in query)
{
     Console.WriteLine(num);
}
4 голосов
/ 10 февраля 2010

Шаблон соответствует всем нецифровым символам. Это ограничит вас неотрицательными целыми числами, но для вашего примера этого будет более чем достаточно.

string input = "0, 10, 20, 30, 100, 200";
Regex.Split(input, @"\D+");
3 голосов
/ 10 февраля 2010

Я думаю, что лучше использовать Microsoft.VisualBasic.FileIO.TextFieldParser Class если вы работаете с текстовыми файлами с разделенными запятыми значениями.

2 голосов
/ 20 января 2017

Иногда столбцы содержат запятые внутри себя, например:

«Какой-то предмет», «Другой предмет», «Также, еще один предмет»

В этих случаях разбиение на "," приведет к разрыву некоторых столбцов. Может быть, проще, но я только что создал свой собственный метод (в качестве бонуса обрабатывает пробелы после запятых и возвращает IList):

private IList<string> GetColumns(string columns)
{
    IList<string> list = new List<string>();

    if (!string.IsNullOrWhiteSpace(columns))
    {
        if (columns[0] != '\"')
        {
            // treat as just one item
            list.Add(columns);
        }
        else
        {
            bool gettingItemName = true;
            bool justChanged = false;
            string itemName = string.Empty;

            for (int index = 1; index < columns.Length; index++)
            {
                justChanged = false;
                if (subIndustries[index] == '\"')
                {
                    gettingItemName = !gettingItemName;
                    justChanged = true;
                }

                if ((gettingItemName == false) &&
                (justChanged == true))
                {
                    list.Add(itemName);
                    itemName = string.Empty;
                    justChanged = false;
                }

                if ((gettingItemName == true) && (justChanged == false))
                {
                    itemName += columns[index];
                }
            }
        }
    }

    return list;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...