split分隔问题

jiajie1982 2010-10-29 01:49:26
string s = "1,1,1,1,2,2,2,2";
如何把字符串s按4个逗号分为一组?
...全文
197 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangwenzhuang 2010-10-30
  • 打赏
  • 举报
回复
支持正则,lz的是举例,5l也是举例。
chenshidan 2010-10-30
  • 打赏
  • 举报
回复
正则表达式的性能和扩展性太差了,如果不是数字就不能“\d”,如果换个分隔符就不能写“,”,最多只能满足楼主那个范例的要求,而且正则表达式的性能实在不敢恭维,另外一个问题是,“\d,\d,\d,\d”仅匹配而已,能拆分出楼主想要的结果还缺少关键一步
8楼的观点偶比较同意
mastermanager 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kkbac 的回复:]
正则.

C# code

using System.Text.RegularExpressions;

Regex regex = new Regex(
@"\d,\d,\d,\d",
RegexOptions.IgnoreCase
);
[/Quote]

正则表达式,支持这个
chenshidan 2010-10-29
  • 打赏
  • 举报
回复
我写的,请大家评评,仅关键代码,没有考虑可能的异常

/// <summary>
/// 重复多次匹配分割字符串
/// </summary>
/// <param name="s">被分割的字符串</param>
/// <param name="separator">分隔符</param>
/// <param name="count">分隔符的重复匹配次数,也就是分隔符匹配多少次时进行分割,当count为1时就相当于.NET自带的Split函数</param>
/// <returns>返回生成的数组</returns>
static string[] SplitString(string s, char separator, int count)
{
List<string> list = new List<string>();

int last = 0;//截取字符串的起始索引
int next = s.IndexOf(separator, last);//截取字符串的终止索引
while (next <= s.Length && next - last > 0)
{
string temp = s.Substring(last, next - last);

if (temp[0] == separator)
{
temp = temp.Substring(1);
}
list.Add(temp);

last = next;
//循环匹配count次
for (int i = 1; i <= count; i++)
{
if (next >= 0&& next <s.Length)
{
next = s.IndexOf(separator, next + 1);
}
else//当next==-1时
{
next = s.Length ;
}
}
}

return list.ToArray();
}


调用:

string[] s= SplitString("1,1,1,1,2,2,2,2", ',', 2);
foreach (var item in s)
{
Console.WriteLine(item);
}


细节上楼主可以自行调整,核心在于使用:
String.IndexOf(	
char value,
int startIndex
)

获取需要的索引然后用Substring截取,参考:
http://msdn.microsoft.com/zh-cn/library/5xkyx09y.aspx
jfy724 2010-10-29
  • 打赏
  • 举报
回复
刚刚找了重载的split函数,貌似还没有这个功能。
jfy724 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhangsuyunpk521 的回复:]
C# code

string str = "1,1,1,1,2,2,2,2";
int Num = str.Split(',').Length / 4;
for (int i =0; i <Num; i++)
{
string splitstr = nu……
[/Quote]
估计不是,人家只是举个例子而已。
他的本意是,以第N个分隔符,分割一次。
mayanly 2010-10-29
  • 打赏
  • 举报
回复
关注中!
zhangsuyunpk521 2010-10-29
  • 打赏
  • 举报
回复

string str = "1,1,1,1,2,2,2,2";
int Num = str.Split(',').Length / 4;
for (int i =0; i <Num; i++)
{
string splitstr = null;
splitstr = str.Substring(i*8, 7);
Console.WriteLine(splitstr);
splitstr = null;
}
Console.WriteLine(str.Substring(Num * 8, str.Length-Num*8));

效果是达到了,不知道是不是你要的
kkbac 2010-10-29
  • 打赏
  • 举报
回复
正则.

using System.Text.RegularExpressions;

Regex regex = new Regex(
@"\d,\d,\d,\d",
RegexOptions.IgnoreCase
);
jfy724 2010-10-29
  • 打赏
  • 举报
回复
关注,看看split有没有什么重载的方法。
jiajie1982 2010-10-29
  • 打赏
  • 举报
回复
分隔后1,1,1,1为一组
2,2,2,2为一组,字符串S的内容很多
q107770540 2010-10-29
  • 打赏
  • 举报
回复
你想 要什么样的结果?
kkbac 2010-10-29
  • 打赏
  • 举报
回复
先按照一个逗号分.
之后再每四个每四个做成一组.

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧