使用字符串拆分

时间:2011-06-14 14:03:46

标签: c# .net

我有一个文字

Category2,“Something with,逗号”

当我用','分开时,它应该给我两个字符串

  • 类别2
  • “逗号,逗号”

但实际上它是从每个逗号分割字符串。

我怎样才能达到预期的效果。

Thanx

5 个答案:

答案 0 :(得分:4)

只需致电variable.Split(new char[] { ',' }, 2)即可。 MSDN中的完整文档。

答案 1 :(得分:2)

你可能想要在这里做很多事情,所以我将解决一些问题:

在第一个逗号上拆分

String text = text.Split(new char[] { ',' }, 2);

在每个逗号上拆分

String text = text.Split(new char[] {','});

拆分不在"

中的逗号
var result = Regex.Split(samplestring, ",(?=(?:[^']*'[^']*')*[^']*$)"); 

最后一个取自C# Regex Split

答案 2 :(得分:1)

指定数组中所需的最大字符串数:

string[] parts = text.Split(new char[] { ',' }, 2);

答案 3 :(得分:0)

String.Split以最简单,最快的级别工作 - 因此它将文本分割到您传递给它的所有分隔符上,并且它没有像双引号这样的特殊规则的概念。

如果您需要一个理解双引号的CSV解析器,那么您可以自己编写或者有一些优秀的开源解析器可用 - 例如http://www.codeproject.com/KB/database/CsvReader.aspx - 这是我在几个项目中使用过的建议。

答案 4 :(得分:0)

试试这个:

public static class StringExtensions
{
    public static IEnumerable<string> SplitToSubstrings(this string str)
    {
        int startIndex = 0;
        bool isInQuotes = false;

        for (int index = 0; index < str.Length; index++ )
        {
            if (str[index] == '\"')
                isInQuotes = !isInQuotes;

            bool isStartOfNewSubstring = (!isInQuotes && str[index] == ',');                

            if (isStartOfNewSubstring)
            {
                yield return str.Substring(startIndex, index - startIndex).Trim();
                startIndex = index + 1;
            }
        }

        yield return str.Substring(startIndex).Trim();
    }
}

用法非常简单:

foreach(var str in text.SplitToSubstrings())
    Console.WriteLine(str);