将字符串拆分为字符串数组。?

时间:2013-01-10 07:50:48

标签: c#

我在C#中执行sql查询时遇到问题。当字符串在IN CLAUSE中包含超过1000个enteries时,sql查询会抛出一个错误。该字符串有超过1000个子字符串,每个子字符串用','分隔。< / p>

我想将字符串拆分为字符串数组,每个字符串包含由','分隔的999个字符串。

如何在字符串中找到','的第n个出现。

6 个答案:

答案 0 :(得分:0)

使用

等实用程序代码将字符串从SQL Server拉入DataSet
string strResult = String.Empty;
using (SqlCommand cmd = new SqlCommand())
{
    cmd.Connection = conn;
    cmd.CommandText = strSQL;
    strResult = cmd.ExecuteScalar().ToString();
}

从SQL Server获取返回的字符串

将字符串拆分为','

string[] strResultArr = strResult.Split(',');

然后获取由','分隔的第n个字符串(我认为这就是“我怎样才能在字符串中找到第n个出现','”使用

int n = someInt;
string nthEntry = strResultArr[someInt - 1];

我希望这会有所帮助。

答案 1 :(得分:0)

您可以使用正则表达式和Index类的Match属性:

// Long string of 2000 elements, seperated by ','
var s = String.Join(",", Enumerable.Range(0,2000).Select (e => e.ToString()));

// find all ',' and use '.Index' property to find the position in the string
// to find the first occurence, n has to be 0, etc. etc.
var nth_position = Regex.Matches(s, ",")[n].Index;

要创建所需大小的字符串数组,您可以拆分字符串并使用LINQ的GroupBy对结果进行分区,然后将结果组连接在一起:

var result = s.Split(',').Select((x, i) => new {Group = i/1000, Value = x})
                         .GroupBy(item => item.Group, g => g.Value)
                         .Select(g => String.Join(",", g));

result现在包含两个字符串,每个字符串包含1000个逗号分隔元素。

答案 2 :(得分:0)

这是怎么回事:

    int groupSize = 1000;

    string[] parts = s.Split(',');
    int numGroups = parts.Length / groupSize + (parts.Length % groupSize != 0 ? 1 : 0);

    List<string[]> Groups = new List<string[]>();
    for (int i = 0; i < numGroups; i++)
    {
        Groups.Add(parts.Skip(i * groupSize).Take(groupSize).ToArray());
    }

答案 3 :(得分:0)

也许是这样的:

string line = "1,2,3,4";
var splitted = line.Split(new[] {','}).Select((x, i) => new {
                                                                Element = x,
                                                                Index = i
                                                            })
                                      .GroupBy(x => x.Index / 1000)
                                      .Select(x => x.Select(y => y.Element).ToList())
                                      .ToList();

在此之后,您应该String.Join IList<string>

答案 4 :(得分:-1)

//initial string of 10000 entries divided by commas
string s = string.Join(", ", Enumerable.Range(0, 10000));
//an array of entries, from the original string
var ss = s.Split(',');
//auxiliary index
int index = 0;

//divide into groups by 1000 entries
var words = ss.GroupBy(w =>
    {
        try
        {
            return index / 1000;
        }
        finally
        {
            ++index;
        }
    })//join groups into "words"
    .Select(g => string.Join(",", g));

//print each word
foreach (var word in words)
    Console.WriteLine(word);

或者您可以在字符串中找到indeces,然后将其拆分为子字符串:

string s = string.Join(", ", Enumerable.Range(0, 100));
int index = 0;

var indeces =
Enumerable.Range(0, s.Length - 1).Where(i =>
    {
        if (s[i] == ',')
        {
            if (index < 9)
                ++index;
            else
            {
                index = 0;
                return true;
            }
        }
        return false;
    }).ToList();

Console.WriteLine(s.Substring(0, indeces[0]));
for (int i = 0; i < indeces.Count - 1; i++)
{
    Console.WriteLine(s.Substring(indeces[i], indeces[i + 1] - indeces[i]));
}

但是,如果可以在将条目组合成一个字符串之前使用它,我会考虑一下。并且可能认为,如果有可能阻止进行需要将优秀列表传递到IN语句的查询的必要性。

答案 5 :(得分:-2)

string foo = "a,b,c";

string [] foos = foo.Split(new char [] {','});

foreach(var item in foos)
{
   Console.WriteLine(item);
}