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


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

пример: "0, 10, 20, 30, 100, 200"

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

6 54

6 ответов:

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

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 и у вас есть система using.Декларация Linq на сайте верхней части исходного файла.

   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
    }

используйте 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);
}

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

string input = "0, 10, 20, 30, 100, 200";
Regex.Split(input, @"\D+");

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

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

"какой-то предмет", "другой предмет", "также еще один предмет"

в этих случаях разбиение на ", " приведет к разрыву некоторых столбцов. Может быть, более простой способ, но я просто сделал свой собственный метод (в качестве бонуса, обрабатывает пробелы после запятых и возвращает 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;
}