逗号分隔的字符串按长度分割但保持逗号分隔?

时间:2015-04-20 15:55:24

标签: arrays string split

我有一个像"105321,102305,321506,0321561,3215658"这样的字符串,我需要用逗号(,)和特定的长度来分割这个字符串,所以如果每个字符串部分的长度为{{1} },分裂的数组必须像:

15

我尝试了几种方法,但我找不到合适的方法来做到这一点

我的代码给了我一个索引超出范围的错误:

105321,102305
321506,0321561
3215658 

编辑:我必须说逗号private static List<string> SplitThis(char charToSplit, string text, int maxSplit) { List<string> output = new List<string>(); string[] firstSplit = text.Split(charToSplit); for(int i = 0; i < firstSplit.Length; i++) { string part = firstSplit[i]; if(output.Any() && output[i].Length + part.Length >= maxSplit) { output.Add(part); } else { if(!output.Any()) output.Add(part); else output[i] += "," + part; } } return output; } 必须是maxSplit变量数量的一部分。

3 个答案:

答案 0 :(得分:0)

这是怎么回事?

 private static List<string> SplitThis(char charToSplit, string text, int maxSplit)
    {
        List<string> output = new List<string>();
        string[] firstSplit = text.Split(charToSplit);
        int i = 0;
        while (i < firstSplit.Length)
        {
            string part = firstSplit[i];
            while (part.Length < maxSplit)
            {
                if (part.Length < maxSplit && i + 1 < firstSplit.Length)
                {
                    if ((part + "," + firstSplit[i + 1]).Length < maxSplit)
                    {
                        part += "," + firstSplit[i + 1];
                        i++;
                    }
                    else
                    {
                        output.Add(part);
                        i++;
                        break;
                    }
                }
                else
                {
                    output.Add(part);
                    i++;
                    break;
                }
            }
        }
        return output;
    }

答案 1 :(得分:0)

这个会简洁,但不是真正的高效

private static Pattern P = Pattern.compile("(.{1,15})(,|$)");

private static String[] split(String string) {
    Matcher m = P.matcher(string);
    List<String> splits = new ArrayList<String>();
    while (m.find()) {
        splits.add(m.group(1));
    }
    return splits.toArray(new String[0]);
}

P中的正则表达式匹配(.{1,15})(,|$)

  • 1到15个字符的序列= .{1,15}
  • 后跟,或行结尾
  • 括号允许分组,第一组的内容是您感兴趣的内容

答案 2 :(得分:0)

static void Main(string[] args)
{
    string originalString = "105321,102305,321506,0321561,3215658";
    string[] commaSplit = originalString.Split(',');
    string tempString = string.Empty;
    List<string> result = new List<string>();

    for (int i = 0; i < commaSplit.Length; i++ )
    {
        if ((tempString.Length + commaSplit[i].Length) > 15)
        {
            result.Add(tempString);
            tempString = string.Empty;
        }

        if (tempString.Length > 0)
        {
            tempString += ',' + commaSplit[i];
        }
        else
        {
            tempString += commaSplit[i];
        }

        if (i == commaSplit.Length - 1 && tempString != string.Empty)
        {
            result.Add(tempString);
        }
    }

    foreach (var s in result)
    {
        Console.WriteLine(s);
    }
    Console.ReadKey();
}

这可能不是最好的解决方案但它有效;)